glm :: unProject для преобразования положения мыши в 3 координаты

Я использую OpenGL 3.2 + GLM для своей математической математики. Ниже мой код:

GLint viewport[4];
GLfloat winZ;

glGetIntegerv(GL_VIEWPORT,viewport);
glBindFramebuffer(GL_FRAMEBUFFER,fbo);
glReadPixels(x,y,1,1,GL_DEPTH_COMPONENT,GL_FLOAT,&winZ);
glBindFramebuffer(GL_FRAMEBUFFER,0);

glm::vec3 screen=glm::vec3(x,viewport[3]-y,winZ);
glm::mat4 view=glm::lookAt(glm::vec3(camera.x,camera.y,camera.z),glm::vec3(0,0,0),glm::vec3(0,1,0));
glm::mat4 projection=glm::perspective(90.0f,(float)viewport[2]/(float)viewport[3],10.0f,500.0f);

glm::vec3 pos=glm::unProject(screen,view,projection,glm::vec4(0,0,viewport[2],viewport[3]));

return {pos.x,pos.y,pos.z};

winZ верно. Когда я кликаю на модели, она равна 1,0 (zfar), а когда я кликаю на модели, она выглядит примерно так, как я ожидаю. Однако возвращаемое значение pos.z это не то, что я ожидаю. Когда мышь находится над фоном: если это к центру, pos.z становится меньше, и когда это по краям экрана pos.z это зфар. Кто-нибудь может объяснить это?

Фактическая проблема, с которой я сталкиваюсь, заключается в том, что pos.x а также pos.y не возвращай то, что я ожидаю, эфир. Моя модель 4,88 единиц в ширину, но пока unProject говорит, что это около 20 единиц в ширину? (если я добавлю значения зависания слева и справа).

Да, и центр экрана 0,0, как и ожидалось.


РЕДАКТИРОВАТЬ: Я также должен отметить, что вернулся pos.z зависит от положения мыши от центра экрана. Он меняется на гораздо большее число, когда он на вершине модели. Если Y-позиция курсора выше центра экрана, pos.z положительно. Если Y-pos ниже, pos.z отрицательно. Кажется странным.

0

Решение

Глупый вопрос. unProject должен брать 2-мерную матрицу просмотра, а не 3-ю. Задача решена.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]