void CMFCopenglView::WindowsToGL(CPoint pt, GLdouble &posX, GLdouble &posY, GLdouble &posZ) {
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX, winY, winZ;
//GLdouble posX, posY, posZ;
glPushMatrix();
// 变换要绘图函数里的顺序一样,否则坐标转换会产生错误
glRotatef(rotate_x, 1.0, 0.0, 0.0);
glRotatef(rotate_y, 0.0, 1.0, 0.0);
glRotatef(rotate_z, 0.0, 0.0, 1.0);
glGetIntegerv(GL_VIEWPORT, viewport); // 得到的是最后一个设置视口的参数
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
glGetDoublev(GL_PROJECTION_MATRIX, projection);
glPopMatrix();
winX = pt.x;
CRect rectDlg;
GetClientRect(rectDlg);//获得窗体的大小
winY = rectDlg.Height() - pt.y;
glReadPixels((int)winX, (int)winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);
gluUnProject(winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);
}
opengl鼠标交互(屏幕二维坐标到三维世界坐标的转换)
最新推荐文章于 2023-04-04 16:48:46 发布