1.方法一:
见链接: OpenGL之坐标转换
最后要注意的事情是在获取变换矩阵和视口的时候有可能发生错误,所以这时需要重新做变换矩阵代码如下:
<span style="white-space:pre"> </span>GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX, winY, winZ;
GLdouble posX, posY, posZ;
glPushMatrix();
openglPaint();
glGetIntegerv(GL_VIEWPORT, viewport);
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
glGetDoublev(GL_PROJECTION_MATRIX, projection);
render();
winX = x;
winY = (float)viewport[3] - y;
glReadPixels((int)x, int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);
gluUnProject(winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);
glPopMatrix();
Point3d v(posX, posY, posZ);
return v;
2.方法2:这种方法主