我想混合透视和正交视图,但我无法让它工作。
我希望 X 和 Y 坐标是正交和 Z 透视。为了澄清起见,我添加了从 OpenGL 坐标到屏幕显示的所需转换的草图:
(我从教程开始,但找不到如何获取顶部、底部等值)
我想混合透视和正交视图,但我无法让它工作。
我希望 X 和 Y 坐标是正交和 Z 透视。为了澄清起见,我添加了从 OpenGL 坐标到屏幕显示的所需转换的草图:
(我从教程开始,但找不到如何获取顶部、底部等值)
你画的只是透视图,而不是混合图。您只需确保观察方向平行于 z 轴,以使盒子的正面和背面保持矩形。
您可能可以使用glFrustum
来实现这一点。
如果您使用标准透视矩阵并且相机面向盒子正面,X/Y 将是均匀的,但是远离相机的移动会将 X/Y 坐标移向中心,从而缩小它们以获得标准视差效果。您绘制的是向窗口顶部移动。您需要做的就是将透视投影裁剪到其标准中心以下。这就是glFrustum
进来的地方 - 向下移动通常对称的顶部/底部参数,沿着您想要的轴对齐相机/视图矩阵,您应该有所需的投影。
相机/视图的任何旋转都会破坏 X/Y 平面上的均匀投影。对于相机移动,您将仅限于平移和移动glFrustum
边界。
编辑想一想,您可能只需在glTranslatef(shearX, shearY, 0)
调用之前加入agluPerspective
并实现相同的目标。