Opengl 变换曲面法向量和切向量

Opengl 变换曲面法向量和切向量,opengl,math,3d,Opengl,Math,3d,根据一本书《基于物理的渲染:从理论到实现》。马特·法尔,格雷格·汉弗莱斯(,第86-87页), 曲面切线向量使用变换矩阵M变换为公共向量,但 曲面法向量使用进行变换 我想知道为什么缩放确实会使法线不正确,但不会接触切线向量?为什么法线如此特殊 看这本书上的数字 我已经读到,为了保持法线和切线的正交性,需要对法线进行这样的变换。但我想得到一些直观的解释。对我来说,直觉是旋转(以及通常可以用正交矩阵描述的所有变换)满足 . 这意味着,对于这些类型的转换,处理一点也不特殊 下面是一个非正交对称矩阵的简

根据一本书《基于物理的渲染:从理论到实现》。马特·法尔,格雷格·汉弗莱斯(,第86-87页),
曲面切线向量使用变换矩阵M变换为公共向量,但
曲面法向量使用进行变换

我想知道为什么缩放确实会使法线不正确,但不会接触切线向量?为什么法线如此特殊

看这本书上的数字


我已经读到,为了保持法线和切线的正交性,需要对法线进行这样的变换。但我想得到一些直观的解释。

对我来说,直觉是旋转(以及通常可以用正交矩阵描述的所有变换)满足 . 这意味着,对于这些类型的转换,处理一点也不特殊

下面是一个非正交对称矩阵的简单示例,该示例说明仅使用该矩阵变换法线是不够的

这里可以看到,您需要使用变换法线,在对称情况下,它等于

注意,这已经涵盖了相当多的转换。就我个人而言,我发现非正交和非对称的变换本身不是很直观,所以我求助于数学解释,这是保持正交性所必需的。因为这是曲面法线的定义属性,所以我觉得这个论点很有道理。也许写出来会让事情变得更清楚:

因此,本书中的转换规则的优点是,它为所有您能想到的转换提供了正确的法线


希望这能有所帮助。

理论上法线不是真正的向量,它们确实是最好的,尽管如此,在3D中,向量和双向量都有三个分量,所以通常可以识别它们。如果我们生活在一个四维世界,我们就不会有这种困惑。这些向量将有4个分量和6个分量

双向量和/或轴向向量之间存在细微差异。如果ijk是向量的基本元素,那么双向量具有基j^kii^j,Hodge对偶映射一个集合到另一个集合,并将双向量发送到伪向量。二元向量可以看作是其他两个向量的叉积

如果您认为法线始终是某对切线向量的叉积,则可以通过首先变换两个切线向量,然后取它们的叉积来找到法线如何变换

让我们把问题中的图表想象成一个穿过圆柱体的切片。在第一幅图中,当圆的横截面为两个切线向量时,分别为
(1/rt2,1/rt2,0)
(0,0,1)
,其中rt2=sqrt(2)。取叉积得到

( 1/rt2 )    ( 0 )    (  1/rt2 )
( 1/rt2 ) X  ( 0 ) =  ( -1/rt2 )
(   0   )    ( 1 )    (   0    )
正常的。现在应用挤压(x,y,z)->(x,y/2,z),切线向量变换为
(1/rt2,1/(2 rt2),0)
(0,0,1)
。以叉积为例

( 1/rt2     )    ( 0 )    (  1/(2 rt2) )
( 1/(2 rt2) ) X  ( 0 ) =  ( -1/rt2     )
(   0       )    ( 1 )    (   0        )
并归一化为
(1/sqrt(5),-2/sqrt(5),0)

不管我们选择哪对切向量,我们仍然会得到相同的结果。上面的计算有点冗长,需要找到一对合适的切线向量。只使用逆矩阵的转置更简单