2010-12-02 2 views
1

y = -50면에 쿼드가 있습니다. 현재 내가 원하는 것은 쿼드에서 마우스 클릭의 좌표를 얻는 것입니다. 나는 이것을 제한된 정도로 할 수 있었다. 문제는 쿼드를 그릴 때 적용한 변형이 설명되지 않는다는 것입니다. 몇 가지 상수를 추가하여 작동 시키지만 사용자가 glRotatef()를 사용하여 x 및 y 축을 기준으로 장면을 회전하게하여 좌표가 회전이 발생하자마자 엉망이되게합니다. 한 번 Z = 0, 두 번)gluUnProject()로 광선 뽑기

내가 gluUnProject을 (전화, 한 번에 z = 1

gluUnProject(mouseX, WINDOW_HEIGHT - mouseY, 0, modelView, projection, viewport, &x1, &y1, &z1); 
gluUnProject(mouseX, WINDOW_HEIGHT - mouseY, 1, modelView, projection, viewport, &x2, &y2, &z2); 

정규화 선 벡터 : 여기

내가 지금 뭘하는지의

x = x2 - x1; 
y = y2 - y1; 
z = z2 - z1; 
mag = sqrt(x*x + y*y + z*z); 
x /= mag; 
y /= mag; 
z /= mag; 

파라 식 :

float t = -(camY)/y; 
planeX = camX + t*x; 
planeY = camY + t*y; 
planeZ = camZ + t*z; 

여기서 (camX, camY, camZ)는 gluLookAt()에 전달 된 카메라 위치입니다.

planeX, planeY 및 planeZ을 쿼드를 그리는 데 사용한 좌표계와 동일한 좌표계로 클릭해야합니다. 이것을 어떻게 할 수 있습니까?

+0

언제 modelView 매트릭스를 잡고 있습니까? 'glRotatef()'의 전후에? – genpfault

답변

1

귀하가 선택한 명시 적 z 깊이를 전달하지 않아도됩니다. 월드 좌표를 찾으려면 해당 마우스 좌표에서 깊이 버퍼 값을 전달해야합니다.

GLfloat depth; 
glReadPixels(x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth); 

gluUnProject로 전달하면 찾고자하는 값을 얻을 수 있습니다. 또한 genpfault가 언급 한 바에 따르면 적절한 순간에 모델 뷰 매트릭스 데이터를 가져오고 있는지 확인하십시오. 그렇지 않으면 매트릭스가 잘못되었습니다.

관련 문제