OpenGL坐标系的理解

最近在项目中老是遇到坐标系转换,尤其是在OpengGL坐标系和窗口坐标系之间转换。OpengGL坐标系和窗口坐标系之间的关系如下图所示:

OpenGL坐标系的理解_第1张图片

许多情况下我们想用鼠标去挑选某个物体。要使用选择模式实现这个功能,首先是在鼠标点击附近的范围内创建一个裁剪区域(可视区域),然后测试有哪些物体在这个可视区域内。GLU库中提供了一个函数gluPickMatrix,我们可以用这个函数创建一个用于描述新的可视区域的矩阵,然后乘以当前的投影矩阵,就可以得到我们想要的可视区域。

void gluPickMatrix(GLdouble x, GLdouble y, GLdouble width, GLdouble height, GLint viewport[4]);

x,y为窗口的坐标定义了可视区域的中心,我们可以设置为鼠标点击的位置。width 和height指定了可视区域的宽高(以窗口中的像素为单位)。viewport是视口。我们可以通过glGetIntegerv(GL_VIEWPORT, viewport);来获得。

gluPickMatrix的效果是把裁剪区域变换为单位立方体-1<= (x,y,z) <=1(或-w<=(wx,wy,wz)<=w,挑选矩阵有效的执行一次正交变换,把裁剪区域映射到单位立方体上。

由于OpenGL的坐标原点在窗口的左下角,而Windows的坐标原点在窗口的左上角。
所以我们调用时,要注意把Y轴的值反转一下。
gluPickMatrix(xPos, viewport[3] – yPos + viewport[1], 2,2, viewport);




你可能感兴趣的:(OpenGL)