我希望将透视图和正交视图混合在一起,但是我无法实现它。
我希望X和Y坐标是正交的,而Z坐标是透视的。为了说明,我添加了一个草图,显示从OpenGL坐标到屏幕显示的所需转换: 我从教程开始学习,但是找不到如何获取上下值等内容。
我希望X和Y坐标是正交的,而Z坐标是透视的。为了说明,我添加了一个草图,显示从OpenGL坐标到屏幕显示的所需转换: 我从教程开始学习,但是找不到如何获取上下值等内容。
你可以用glFrustum
来实现这个效果。
如果你使用标准的透视矩阵,并且相机正对着盒子的前面,X/Y坐标将是均匀的,然而远离相机移动会将X/Y坐标移向中心,缩小它们以产生标准的视差效果。你所画的是向窗口顶部移动。你需要做的就是将透视投影裁剪到其标准中心以下。这就是glFrustum
的作用 - 将通常对称的top/bottom参数向下移动,沿着你想要的轴对齐相机/视图矩阵,然后你应该得到所需的投影。
相机/视图的任何旋转都会破坏X/Y平面上的均匀投影。对于相机移动,你只能限制于平移和移动glFrustum
的边界。
编辑 细想一下,你可能只需要在调用gluPerspective
之前加入glTranslatef(shearX, shearY, 0)
就可以达到同样的效果。