opengl - sub surface scatering - 纹理空间扩散

时间:2016-05-02 09:57:33

标签: opengl

我会向http://http.developer.nvidia.com/GPUGems/gpugems_ch16.html示例16-5提出问题。用于打开模型并执行漫反射照明的顶点程序

array

ligthMatrix用于变换顶点位置(IN.pos)。但我不明白为什么允许使用这个变换矩阵来转换顶点法线(IN.normal)。我认为法线需要另一个特殊的变换矩阵。?。?

2 个答案:

答案 0 :(得分:0)

(float3x3) lightMatrix是一个3x3矩阵,它基本上只对旋转进行编码。你需要一个4x4矩阵来进行翻译。

旋转法线使它们在场景空间中有意义(即使它们随着物体旋转而旋转),但由于矩阵缺少平移分量,它们将保持与原始相同的大小(如果它们是标准化后,它们将保持标准化。)

答案 1 :(得分:0)

  

但是我不明白,为什么允许使用这个变换矩阵来转换顶点法线(IN.normal)。

这是一个捷径。只在某些情况下有效的一种。

要使用的正确矩阵是位置变换矩阵的逆/转置。但是,旋转矩阵的转置是。逆的倒数是原始的。因此,如果您知道您的位置矩阵仅包含旋转(和平移,我们忽略法线),那么您可以按原样使用矩阵。

这样做的危险在于,如果你忘记你已经做出了这个假设,那么就开始决定对你的职位使用缩放变换。