我正在编写一个使用 OpenGL 的 MFC c++ 应用程序。该程序允许在 3D 中绘制和操作对象。现在我想找到坐标,在我的对象被绘制的同一个坐标空间中,我在屏幕上点击鼠标的任何地方。
到目前为止,我一直在使用 glReadPixels 和 gluUnProject 的组合,它一直在工作,但只有当我在已经绘制对象的地方单击鼠标时。如果我单击对象外部的任何位置,则获得的坐标将完全关闭。
所以我想知道如何更改我的代码,以便我可以在我的对象在屏幕上的任何位置的坐标空间中找到坐标。这是我一直在使用的代码:
GLint viewport[4];
GLdouble ox, oy, oz;//the coordinates I need
GLfloat winZ = 0.0;
::glGetIntegerv(GL_VIEWPORT, viewport);
::glGetDoublev(GL_PROJECTION_MATRIX, projectionMatrix);
::glGetDoublev(GL_MODELVIEW_MATRIX, modelviewMatrix);
GLfloat winX = (float)point.x;//point.x and point.y are the mouse coordinates
GLfloat winY = (float)viewport[3] - (float)point.y;
::glReadPixels( winX, winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);
gluUnProject((GLdouble)winX, (GLdouble)winY, (GLdouble)winZ, modelviewMatrix, projectionMatrix, viewport, &ox, &oy, &oz);