문제
나는 이보기 설정:
glMatrixMode(GL_MODELVIEW); //Switch to the drawing perspective
glLoadIdentity(); //Reset the drawing perspective
과를 얻을 화면 위치(sx,sy)에서 마우스 클릭합니다.
주어진 값 z,어떻게 계산할 수 있습니 x 및 y 에서 3d-공간에서 sx 및 sy?
해결책
당신이 사용해야 한다 gluUnProject
:
첫째,계산"unprojection"하 근처의 비행기:
GLdouble modelMatrix[16];
GLdouble projMatrix[16];
GLint viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport);
glGetDoublev(GL_MODELVIEW_MATRIX, modelMatrix);
glGetDoublev(GL_PROJECTION_MATRIX, projMatrix);
GLdouble x, y, z;
gluUnProject(sx, viewport[1] + viewport[3] - sy, 0, modelMatrix, projMatrix, viewport, &x, &y, &z);
다음까지 비행기:
// replace the above gluUnProject call with
gluUnProject(sx, viewport[1] + viewport[3] - sy, 1, modelMatrix, projMatrix, viewport, &x, &y, &z);
이제 당신은 라인에서 세계의 좌표를 흔적을 가능한 모든 포인트를 당신 수 이 되면 아이콘을 클릭합니다.그래서 당신은 이 보간:당신은 주어진 z 좌표:
GLfloat nearv[3], farv[3]; // already computed as above
if(nearv[2] == farv[2]) // this means we have no solutions
return;
GLfloat t = (nearv[2] - z) / (nearv[2] - farv[2]);
// so here are the desired (x, y) coordinates
GLfloat x = nearv[0] + (farv[0] - nearv[0]) * t,
y = nearv[1] + (farv[1] - nearv[1]) * t;
다른 팁
이것은 최고의 응답으로 가장 신뢰할 수 있는 소스 OpenGL 의 웹사이트.
이에 따라 프로젝션 매트릭스,지 않는 모델의 보기 매트릭스입니다. http://www.toymaker.info/Games/html/picking.html 는 데 도움이 됩니다-그것은 D3D 중심지만 이론은 동일합니다.
면을 마우스를 기반을 따기,하지만,내가 사용하는 것이 좋습니다 선택로 업그레이드해야 할 수 있습니다.
편집:마음,당신의 모든 매트릭스는 플레이로 오지만,때문에 당신의 id 그것은 nonissue.
libqglviewer 좋은 선택 framework 면 당신이 찾고있는 무엇
제휴하지 않습니다 StackOverflow