法线顶点经过法线矩阵变换后最终在什么坐标系中?

In what coordinate system do normal vertices end up after transformation by a normal matrix?

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

当顶点的位置被模型视图矩阵变换时,顶点现在被称为 "view-space",因为它现在位于相对于 viewer/camera 的坐标系中。

但是,当变换顶点法线时,将使用法线矩阵¹。

虽然I understand why this is done,但我不确定变换后的法线顶点是否也据说在"view-space"中。直觉上,似乎是这样。

法线矩阵变换后的顶点法线在"view space"中真的正确吗?如果不是,是否将法线顶点转换为相同的坐标space,或者是否有其他更合适的术语?


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

是的。让我解释。 (写论文不好意思!)

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

坐标space只不过是相对于哪个原点几何进行测量的比较。

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

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

如果我对两个立方体应用恒等变换,我现在可以说它们在同一坐标 space,因为 所有 坐标的原点两个立方体的顶点现在定义相同。

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


那么法线如何适合这张图片?

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

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

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

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

即使表面法线在技术上并不总是受到模型上应用的变换的影响(见翻译),从一个坐标 space 到另一个坐标的变换可能只涉及恒等变换,正如我已经先前显示。

所以回答你的问题:是的,对一组可能不同的坐标应用一系列可能不同的变换,将它们变换成相同的坐标 space 也可能会改变它们的法线,这将被视为与代表表面法线的模型表面上的顶点/点处于同一坐标 space。