如何在正交投影矩阵中正确设置近/远剪裁?

时间:2013-09-06 12:49:36

标签: opengl-es matrix three.js webgl projection

我想进行以下投射:

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

它主要按预期工作,除了:

  1. 它在非完美的方形屏幕中变形。
  2. 它会进行近/远裁剪,从屏幕上删除一些对象。我不希望这样。
  3. 因此,问题归结为:如何在此矩阵上设置近/远FOV,如何更新它以不仅考虑屏幕宽度,还考虑宽度/高度比?

    注意:有问题的软件使用Three.js,但我猜它使用与OpenGL相同的约定,因此我将其标记为。

2 个答案:

答案 0 :(得分:1)

如果你在firefox中查看glOrtho()页面(chrome 仍然不支持MathML),它会给出用于拼写矩阵的公式。

使Z和W行正确对于近/远平面和非线性深度非常重要。如果你通过(2,-2)缩放获得了良好的结果,只需用glOrtho替换最后两行,你应该设置。确保不要选择相距太远的近/远值或者深度值开始相交并且你得到z-fighting。

答案 1 :(得分:0)

关于正交投影的

Wikipedia has a good reference。从那以后:

img

你可以编写一个函数来生成这个矩阵,给出far / near / right / left / top / bottom