LINUX.ORG.RU

[openGL] не получается перспективная проекция

 


0

1

Попробовал сделать перспективную проекцию по мотивам этого, но получается какая-то лажа: пирамида сплющивается.

Для матриц используется glm - такой порт glsl на С++, для создания окна - SDL, есть файл с проектом для QtCreator(просто привык к этой IDE, хотя здесь без Qt).

Матрица создается следующей функцией:

mat4 mPerspective(float ratio, float zNear, float zFar, float fov)
{
    const float f = 1.0f/tan(radians(fov)/2.0f);
    mat4 mat = mat4(1.0f);
    mat[0][0]=f/ratio;
    mat[1][1]=f;
    mat[2][2]=(zFar+zNear)/(zFar-zNear);
    mat[2][3]=(2.0f*zFar*zNear)/(zNear-zFar);
    mat[3][2]=1.0f;
    mat[3][3]=0.0f;
    return mat;
}

После всех инициализаций, каждый кадр с матрицей модели происходит следующее:

void initWindow()
{
//...
    pers = mPerspective(ar,1.0f,100.0f,30.0f);
}
void drawScene()
{
    //...
    unifScale+=0.1f;
    vec4 rotVec(0.3f,unifScale,0.3f,1.0f);
    vec4 trVec(0.0f,0.0f,15.0f,1.0f);
    vec4 scVec(0.1f);
    tr = mat4(1.0f);
    tr =  mScale(scVec,tr);
    tr = mRotate(rotVec,tr);
    tr = mTransform(trVec,tr);
    tr*=pers;
    //...
}
Вроде бы матрицу сделал как нужно, в чем м.б. дело?

★★★★

mat4 mat = mat4(1.0f); Значит, что у тебя получилась матрица, заполненная единицами? А почему не нулями?

anonymous
()
Ответ на: комментарий от runtime

http://ogl-math.git.sourceforge.net/git/gitweb.cgi?p=ogl-math/ogl-math;a=blob;f=glm/core/type_mat4x4.hpp;h=705ce8c2262f26791b4e1a413c1f34abdfc9154f;hb=HEAD

хотя, как выяснилось, там есть встроенные функции и для трансляции, и для перспективы. Перешел на них, вообще ничего не рисуется:(

wingear ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.