문제

나는 이보기 설정:

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 면 당신이 찾고있는 무엇

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top