Point3D CSideView::TurnGLpoint(CPoint Tpoint)
{
Point3D Rp;
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX,winY,winZ;
GLdouble posX,posY,posZ;
glGetIntegerv(GL_VIEWPORT,viewport);
glGetDoublev(GL_MODELVIEW_MATRIX,modelview);
glGetDoublev(GL_PROJECTION_MATRIX,projection);
winX=(float)Tpoint.x;
winY=viewport[3]-(float)Tpoint.y;
glReadPixels((int)winX,(int)winY,1,1,GL_DEPTH_COMPONENT,GL_FLOAT,&winZ);//获取鼠标屏幕坐标处像素的深度Z
gluUnProject(winX,winY,winZ,modelview,projection,viewport,&posX,&posY,&posZ);
Rp.x=posX;
Rp.y=posY;
Rp.z=posZ;
return Rp;
}
Point3D为自己写的一个结构体,可以根据自己需要写。
直接调用该函数:
p3d=TurnGLpoint(p);
补充Webgl,三维转