在普通矩阵转换后,正常顶点在什么坐标系中结束?

时间:2017-01-29 02:49:17

标签: opengl 3d glsl vertex-shader

在计算机图形学中,法向量用于确定某些几何体的表面“面向”的方向,因为它们垂直于所述表面。

当顶点的位置被模型视图矩阵变换时,顶点现在被称为“视图空间”,因为它现在位于相对于观察者/摄像机的坐标系中。

但是,当转换顶点法线时,会使用普通矩阵¹。

虽然I understand why this is done,我不确定转换的正常顶点是否也被称为“视图空间”。直觉上,似乎可能是这种情况。

说正常矩阵变换的顶点法线在“视图空间”中是否真的正确?如果不是,那么普通顶点是否转换为相同的坐标空间,还是有其他一些更合适的术语?

¹模型 - 视图矩阵的逆的转置。

1 个答案:

答案 0 :(得分:1)

是。让我解释。 (抱歉写一篇文章!)

虽然顶点和法线通常都表示为浮点3D矢量,但它们的性质使它们不同。

坐标空间只不过是比较哪个原点几何相对于。

例如,我定义了两个大小为1x1x1的立方体。定义所有8个顶点的原点位于它们的中心。因此,它们的顶点坐标是(+ -0.5,+ -0.5,+ -0.5)的所有可能组合。

这些立方体似乎有类似的坐标,但到目前为止我们只将它们视为对象。要将它们放置在场景中,我们需要定义一个转换,它将在该场景中定义它们的位置,方向和大小。

如果我在两个立方体上应用身份转换,我现在可以说它们位于相同的坐标空间中,因为的所有顶点坐标的起源 >立方体定义现在是相同的。

如果我将其中一个或两个转换更改为我喜欢的任何转换都无关紧要。只要我可以说在将变换应用于每个立方体的坐标之后,每个立方体的所有顶点的坐标都是相对于同一原点测量的,它们位于相同的坐标空间中。

那么法线如何适应这张照片?

我将在这里区分表面法线和法线向量。表面法线是表示与模型表面上的特定点正交的归一化矢量的数学概念。法向量是该表面法线在已知点处的特定值。法线向量是您通常与顶点坐标一起存储在内存中的。

某些变换可以改变模型的曲面法线。其他人没有。如果我翻译我之前定义的任何立方体,立方体每个表面的方向也不会改变。因此,曲面法线保持与您在曲面上选择的完全相同的点。缩放立方体时也是如此。

但是,如果我旋转立方体,立方体上部分或全部曲面的方向会发生变化。这意味着表面法线会发生变化。作为顶点规范的一部分存储在存储器中的法线向量因此过时,并且必须旋转以使它们与表面法线再次一致。

我们可以说法向量依赖于表面法线,而法向量依赖于对顶点(或模型表面上的任何点)进行的任何变换。因此,在顶点上应用变换,将其从一个坐标空间带到另一个坐标空间,会导致法线向量跟随。

即使表面法线在技术上并不总是受到模型上应用的变换的影响(参见翻译),从一个坐标空间到另一个坐标空间的变换只能涉及身份变换,正如我之前所示。

所以回答你的问题:是的,在一组可能不同的坐标上应用一系列可能不同的变换,将它们转换成相同的坐标空间也可能会改变它们的法线,无论如何都被认为是在同一个坐标空间中作为模型表面上的顶点/点,它们代表表面法线。