我想进行以下投射:
x' = 2*x - z
y' = -2*y - z
z' = -z
我想出了这个矩阵:
2, 0, 0, 0,
0, -2, 0, 0,
0, 0, -1, 0,
0, 0, 0, screen_width
它主要按预期工作,除了:
因此,问题归结为:如何在此矩阵上设置近/远FOV,如何更新它以不仅考虑屏幕宽度,还考虑宽度/高度比?
注意:有问题的软件使用Three.js,但我猜它使用与OpenGL相同的约定,因此我将其标记为。
答案 0 :(得分:1)
如果你在firefox中查看glOrtho()页面(chrome 仍然不支持MathML),它会给出用于拼写矩阵的公式。
使Z和W行正确对于近/远平面和非线性深度非常重要。如果你通过(2,-2)缩放获得了良好的结果,只需用glOrtho替换最后两行,你应该设置。确保不要选择相距太远的近/远值或者深度值开始相交并且你得到z-fighting。
答案 1 :(得分:0)
Wikipedia has a good reference。从那以后:
你可以编写一个函数来生成这个矩阵,给出far / near / right / left / top / bottom