【问题标题】:How to set correctly near/far clipping in an ortographic projection matrix?如何在正交投影矩阵中正确设置近/远裁剪?
【发布时间】:2013-09-06 22:44:17
【问题描述】:

我想做如下投影:

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. 它会进行近/远剪辑,从屏幕上删除一些对象。我不想这样。

所以,问题归结为:如何在此矩阵上设置近/远 FOV 以及如何更新它以不仅考虑屏幕宽度,还考虑宽度/高度比?

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

【问题讨论】:

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


    【解决方案1】:

    如果您在 firefox 中查看 glOrtho() 页面(chrome 仍然不支持 MathML),它会给出它用于正交矩阵的方程。

    正确设置 Z 和 W 行对于近/远平面和非线性深度很重要。如果您使用 (2, -2) 缩放获得了良好的结果,只需将最后两行替换为 glOrtho 行,您就应该设置好了。确保不要选择相距太远的近/远值,否则深度值开始相交,您会遇到 z-fighting。

    【讨论】:

      【解决方案2】:

      Wikipedia has a good reference 在正交投影上。从此:

      你可以写一个函数来生成这个矩阵给定远/近/右/左/上/下

      【讨论】:

      • 这没有任何意义。我正在使用这些插槽来确定每个轴对投影的影响程度。这个公式没有提供我需要的信息。
      猜你喜欢
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-08
      • 2021-05-30
      • 2014-10-14
      • 2011-04-06
      相关资源
      最近更新 更多