OpenGL:混合正交投影和透视投影

6
我希望将透视图和正交视图混合在一起,但是我无法实现它。
我希望X和Y坐标是正交的,而Z坐标是透视的。为了说明,我添加了一个草图,显示从OpenGL坐标到屏幕显示的所需转换:

sketch of desired view

我从教程开始学习,但是找不到如何获取上下值等内容。

你使用的OpenGL版本是哪个?你已经在使用自定义矩阵吗? - vallentin
你想要结合一个透视矩阵和一个剪切矩阵,我相信...我不认为有一个构建剪切矩阵的命令。你必须自己构建它。 - godel9
图表上的坐标看起来不对,有6个顶点的x坐标都是10。 - JWWalker
@JWWalker:我修复了坐标,感谢你的提示。 - hardmooth
2个回答

1
你所画的只是透视图,不是混合视图。你只需确保观察方向与z轴平行,使盒子的前后面保持矩形即可。

我已经尝试过了,它可以正常工作。一旦我弄清楚如何缩放场景,使得场景在视图体积内最大化,我会将其发布为答案。 - hardmooth

0

你可以用glFrustum来实现这个效果。

如果你使用标准的透视矩阵,并且相机正对着盒子的前面,X/Y坐标将是均匀的,然而远离相机移动会将X/Y坐标移向中心,缩小它们以产生标准的视差效果。你所画的是向窗口顶部移动。你需要做的就是将透视投影裁剪到其标准中心以下。这就是glFrustum的作用 - 将通常对称的top/bottom参数向下移动,沿着你想要的轴对齐相机/视图矩阵,然后你应该得到所需的投影。

相机/视图的任何旋转都会破坏X/Y平面上的均匀投影。对于相机移动,你只能限制于平移和移动glFrustum的边界。

编辑 细想一下,你可能只需要在调用gluPerspective之前加入glTranslatef(shearX, shearY, 0)就可以达到同样的效果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接