2013-02-25 5 views
0

행렬 수학에 OpenGL 3.2 + GLM을 사용하고 있습니다. 아래 코드는glm :: unproject 마우스 위치를 3 좌표로 변환

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은 zfar입니다. 아무도 이것을 설명 할 수 있습니까?

실제 문제는 pos.xpos.y이 내가 예상하는 것을 반환하지 않는다는 것입니다. 내 모델의 너비는 4.88이며, unProject은 약 20 단위라고 말하고 있습니까? (만약 내가 왼쪽과 오른쪽에 떠오르게의 값을 추가).

아, 화면 중심이 예상대로 0,0입니다.


편집 : 나는 또한 반환 pos.z가 화면의 중심에서 마우스의 위치에 따라 있음을 알아 두셔야합니다. 모델 상단에있을 때 훨씬 더 높은 수로 변경됩니다. 커서의 Y 위치가 화면 중앙보다 높으면 pos.z이 양수입니다. Y-pos가 아래에 있으면 pos.z이 음수입니다. 정말 이상하게 보입니다.

답변

0

어리석은 질문입니다. unProject는 3D보기가 아닌 2D보기 행렬을 가져야합니다. 문제 해결됨.

관련 문제