1.gluUnProject传入OGL屏幕坐标值,产生世界坐标系中的值,经过ViewPort矩阵,Project矩阵,Model-View矩阵的逆变换得到。gluUnProject个参数中的值见OGL文档,其中winY值需要将窗口坐标系转换为OGL左下角的屏幕坐标系才能得到。winZ值需要已知物体世界坐标系中的z值经过glProject变换得到,才能获得屏幕中点击物体的正确世界坐标系值。
2.变换矩阵用
glGetIntegerv查询获得(无论是固定管线,还是Shader可编程管线)。
GLint viewport[4];
GLdouble mvmatrix[16], projmatrix[16];
glGetIntegerv (GL_VIEWPORT, viewport);
GLdouble mvmatrix[16], projmatrix[16];
glGetDoublev (GL_MODELVIEW_MATRIX, mvmatrix);
glGetDoublev (GL_PROJECTION_MATRIX, projmatrix);