OpenGL中的屏幕坐标和世界坐标的转换

GLint    viewport[4]; 
 GLdouble modelview[16]; 
 GLdouble projection[16]; 
 GLfloat  winX, winY, winZ; 
 GLdouble posX, posY, posZ; 

 glPushMatrix();
 
 // 变换要绘图函数里的顺序一样,否则坐标转换会产生错误
 glScalef(m_srtMatrix[0], m_srtMatrix[1], m_srtMatrix[2]); // 缩放、平移、旋转变换
 glRotatef(m_srtMatrix[3], 1.0f, 0.0f, 0.0f);
 glRotatef(m_srtMatrix[4], 0.0f, 1.0f, 0.0f);
 glRotatef(m_srtMatrix[5], 0.0f, 0.0f, 1.0f);
 glTranslatef(m_srtMatrix[6], m_srtMatrix[7], m_srtMatrix[8]);


 glGetIntegerv(GL_VIEWPORT, viewport); // 得到的是最后一个设置视口的参数
 glGetDoublev(GL_MODELVIEW_MATRIX, modelview); 
 glGetDoublev(GL_PROJECTION_MATRIX, projection); 

 glPopMatrix();

 winX = x; 
 winY = screenHeight - y;
 glReadPixels((int)winX, (int)winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ); 
 gluUnProject(winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);


http://www.opengl.org/sdk/docs/man/xhtml/gluUnProject.xml  gluUnProject()

http://www.opengl.org/sdk/docs/man/xhtml/gluProject.xml  gluProject()

http://blog.csdn.net/abcdef8c/article/details/6716737   屏幕坐标到opengl世界坐标转换

你可能感兴趣的:(OpenGL)