【问题标题】:Do Normalized device coordinates with the same z-value lie in a plane?具有相同 z 值的标准化设备坐标是否位于平面内?
【发布时间】:2013-07-19 17:10:58
【问题描述】:

我正在做一个项目,我想获取我在 NDC 中拥有的一组顶点并将它们放回世界空间,但我希望它们都位于一个平面上。既然有无数个顶点都可以投影到同一个 NDC x 和 y 上,那么可以肯定地说 z 坐标是完全独立的吗?我可以通过管道中所有矩阵的逆矩阵更改 z 坐标并“取消投影”该点,并让它出现在屏幕上的同一个“位置”吗?这就是我对它应该如何工作的理解,对吗?

如果是,那么我的直觉是,如果我想将所有点放在同一平面(在世界空间中)作为一个特定点(法线方便地等于相机的观察方向),那么我应该必须将它们的 NDC z 值设置为等于该特定 NDC 点的 z 值吗?那是对的吗?这有意义吗?

【问题讨论】:

    标签: opengl graphics 3d


    【解决方案1】:

    是的,具有相同 z 值的点将位于法线平行于视图方向的平面中。虽然从 NDC z 值到深度的转换是一些任意函数,但它只取决于 z 值(而不是 x 和 y)。

    【讨论】:

      【解决方案2】:

      Z 值不是独立的,即使在 NDC 中,它仍然是场景的深度

      意思是,许多顶点可能有相同的 X 和 Y,它们可能有不同的 Z,并且可能不在同一个平面上。

      如果您要修改 Z 组件,从右视图看,它看起来像是在同一平面上,但实际上它是沿着射线移动的。这是一篇有助于描述该射线的论文。 http://myweb.lmu.edu/dondi/share/cg/unproject-explained.pdf

      如果您想从 NDC 进入世界空间,然后在同一个平面上,您只需将它们全部投射到世界空间中的那个平面上。

      如果有帮助,以下是如何将点投影到平面上:
      How do I find the orthogonal projection of a point onto a plane

      这里提醒一下如何进入 NDC:
      http://www.songho.ca/opengl/gl_transform.html

      【讨论】:

      • 是的,我已经让他们进入了 NDC,我让他们倒退了。我尝试在 NDC 中手动设置 z 值,希望它们在同一平面上,但事实并非如此。它们相差不大,因此可能是舍入误差,但我认为应该如此。我要查看那篇论文,看看我是否发现我做错了什么微妙的地方。
      • 另外,一旦它们进入世界空间,就将它们投影到平面上,当我尝试它时,并不太奏效,因为它们不再位于同一个 XY(在屏幕空间中)。如果这是正交的,我相信它会很好,但这并没有考虑到透视扭曲。这就是为什么我希望从 NDC 开始并向后工作,以确保它们在正确的 XY(屏幕空间)位置和平面上,即使它更昂贵。
      • 我用双精度数重新实现了我的所有矩阵乘法,现在这些点距离平面 0.000117127 个单位以内,所以我认为它正在工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 2020-02-06
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      相关资源
      最近更新 更多