码迷,mamicode.com
首页 > Windows程序 > 详细

Win窗口坐标二维坐标与OpenGl的世界坐标系的转换

时间:2015-12-23 10:46:07      阅读:655      评论:0      收藏:0      [点我收藏+]

标签:

  Win窗口坐标二维坐标与OpenGl的世界坐标系的转换

1. 首先明白Win环境的窗口二维坐标系表示

  即,Win的屏幕坐标的坐标系表示如下:左上为坐标系原点,正右为X轴正方向, 正下方为Y轴正方向。

  技术分享     

  技术分享  技术分享

2. 在了解一下Opengl的视口坐标系

  Opengl设置视口操作如下:

glViewport(0,0,m_wide,m_heigth);

  技术分享

3. 关于opengl的世界坐标系,用户坐标系,模型坐标系可以查看博客

  http://www.cnblogs.com/icmzn/p/5003600.html

4. 屏幕坐标到opengl世界坐标转换

  整个过程如下:详细讲解可以参考如下博客:

  http://www.cnblogs.com/icmzn/p/5050008.html

  技术分享

5. 程序实例

  

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);
  
 posX, posY, posZ,即为世界坐标系的坐标

 

  

Win窗口坐标二维坐标与OpenGl的世界坐标系的转换

标签:

原文地址:http://www.cnblogs.com/icmzn/p/5069070.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!