![]() |
1
51
它来源于法线的定义。
假设你有正常的,
切线向量与对象曲面的运行方向相同。因此,如果曲面是平面的,那么切线就是对象上两个可识别点之间的差。所以如果
通过考虑极限,同样的逻辑也适用于非平面表面。
在这种情况下,假设您打算通过矩阵变换模型
将其转化为行对列,以消除显式点积:
把转置器拉到外面,去掉支架:
这就是“法线的转置”[product with]“已知变换矩阵的转置”[product with]“我们正在求解的变换”[product with]“模型表面上的向量”=0
但我们先说
因此,我们可以得出结论:
|
![]() |
2
40
下面是我最喜欢的证明,其中N是法线,V是切向量。因为它们是垂直的,所以它们的点积为零。M是任意3x3可逆变换(M -1 *M=I)。N'和V'是由M变换的向量。
为了得到一些直觉,考虑下面的剪切变换。
请注意,确实如此 不 应用于切线向量。 |
![]() |
3
36
请看本教程: https://paroj.github.io/gltut/Illumination/Tut09%20Normal%20Transformation.html 可以想象,当球体的曲面拉伸(因此球体沿一个轴或类似轴缩放)时,该曲面的法线将彼此“弯曲”。事实证明,要实现这一点,需要反转应用于法线的比例。这与使用 逆转置矩阵 .上面的链接显示了如何从中导出逆转置矩阵。 还要注意的是,当比例均匀时,可以简单地将原始矩阵作为法线矩阵传递。假设同一个球体沿所有轴均匀缩放,曲面将不会拉伸或弯曲,法线也不会拉伸或弯曲。 |
![]() |
4
3
如果模型矩阵由平移、旋转和缩放组成,则不需要进行逆转置来计算法线矩阵。只需将法线除以平方标度,再乘以模型矩阵,我们就完成了。你可以将其扩展到任何具有垂直轴的矩阵,只需为你正在使用的矩阵的每个轴计算平方比例即可。 我在我的博客上写下了细节: https://lxjk.github.io/2017/10/01/Stop-Using-Normal-Matrix.html |
![]() |
5
-2
我不明白为什么在与模型矩阵相乘之前,不将方向向量的第四个元素归零。不需要反转或转置。将方向向量视为两点之间的差。将两个点与模型的其余部分一起移动——它们仍然处于与模型相同的相对位置。取两点之差得到新的方向,第四个元素抵消为零。便宜多了。 |
![]() |
user1424739 · 如何获得子地块的绘图区域大小? 3 年前 |
![]() |
Nor-s · 如何使用ASIMP正确加载模型? 3 年前 |
![]() |
Makogan · 3D纹理大小影响程序输出,不会引发错误 7 年前 |
![]() |
Karsten W. · 底部R中的旋转箭头 7 年前 |
|
168grani · Matplotlib图形的线条平滑 7 年前 |