OpenGL: 屏幕二维坐标转化成三维模型坐标

        我们把OpenGL里模型的三维坐标往二维坐标的转化称为投影,则屏幕上的二维坐标往三维坐标转化则可以称为反投影,下面我们来介绍一下反投影的方法。

主要是gluUnProject函数的使用,下面是代码:

void screen2GLPoint()
{
 int x = xCord;    /* 屏幕坐标 */
 int y = yCord;
 GLint viewport[4];
 GLdouble mvmatrix[16], projmatrix[16];
 GLfloat winx, winy, winz;
 GLdouble posx, posy, posz;

 glPushMatrix();

 //glScalef(0.1, 0.1, 0.1);
 glGetIntegerv(GL_VIEWPORT, viewport);   /* 获取三个矩阵 */
 glGetDoublev(GL_MODELVIEW_MATRIX, mvmatrix);
 glGetDoublev(GL_PROJECTION_MATRIX, projmatrix);

 glPopMatrix();

 winx = x;
 winy = HEIGHT - y;

 glReadPixels((int)winx, (int)winy, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winz);   /* 获取深度 */
 gluUnProject(winx, winy, winz, mvmatrix, projmatrix, viewport, &posx, &posy, &posz); /* 获取三维坐标 */
 cout << posx << ' ' << posy << ' ' << posz << endl;
} 

       网上有的文章说还要考虑模型的旋转、平移与缩放,即反投影的时候也要进行反旋转、反平移与反缩放,但是经过我的实验,这个是不用考虑的,因为反投影的时候导出的三个矩阵就包含旋转、平移与缩放的矩阵信息。

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页