OpenGL的窗口坐标系是这样表示的:
以窗口左下角为坐标原点,往右、往上、往里分别为x,y,z轴正方向。
我试图完成的工作是,指定窗口上的某一点,并赋予其一个假定的深度(z坐标),然后求得该点在场景中对应的眼坐标。
目前我掌握的方法是调用GLuUnProject()函数。该函数定义为:
int gluUnProject( GLdouble winx , GLdouble winy , GLdouble winz ,
const GLdouble modelMatrix[] ,
const GLdouble projMatrix[] ,
const GLint viewport[] ,
GLdouble* objx ,
GLdouble* objy ,
GLdouble* objz );
参数说明:
1. winx,winy,winz为输入的窗口坐标
2. modelMatrix是当前的模型矩阵,获得的方法是
GLdouble modelMatrix[16];
glGetDoublev( GL_MODELVIEW_MATRIX , modelMatrix );
3. projMatrix是当前的投影矩阵,获得的方法是
GLdouble projMatrix[16];
glGetDoublev( GL_PROJECTION_MATRIX , projMatrix );
4. viewport是当前的视口信息,按照存储于数组中的顺序依次为左上角x,y坐标、宽度及高度,获取方法是
GLint viewport[4];
glGetIntegerv( GL_VIEWPORT , viewport );
5. objx,objy,objz分别是指向所求的对应坐标的指针
为了避免造成混乱,我认为在进行求解之前,应当复原模型试图矩阵。
这里给出整个过程的代码:
4]; //4]; //
16]; //
16]; //
0.0 , 0.0 , 0.4 , modelview , project , viewport , &obj[0] , &obj[1] , &obj[2] );
转载于:https://blog.51cto.com/dxwang/685052