分类:
2009-08-04 19:58:07
用OpenGL库将鼠标的windows坐标转化为鼠标位置在视体中的坐标,通常我们用到的以下的框架:
|
其中viewport存储OpenGL视口坐标,viewport[0] = viewport[1] = 0, viewport[2] = w(视口的宽), viewport[3] = h(视口的高); 因为OpenGL的视口是以左下角为原点,而windows窗口则是以左上角为原点,所以要将winY先行转化;
然后,我们用glReadPixels((GLint)winX, (GLint)winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ)获得(winX, winY)对应点在OpenGL视体中的深度缓冲值, 这个深度缓冲值介于[0, 1]之间,为0时对应视口的近端, 为1时对应视口的远端, 得出这个值之后, 再将这个值与前面的得出的3个矩阵值一并代入逆投影变换中, 最终得到(winX, winY)对应点在OpenGL视体中的三维坐标值.
这里我们重点区分下winZ 和 WorldPos.z , 前者是深度缓冲值, 其取值范围为[0, 1],具体这个值是怎么来的, 我没搞明白, 等我搞明白了再补上, 或者哪位明白的人看到这篇文章留言或email我都行; 后者的话是(winX, winY)对应点在OpenGL视体坐标系中的三维坐标值中的z值.
欢迎大家留言,多多益善:)