光照 (5) 法线矩阵(Normal Matrix)

  1. 定义

模型矩阵左上角3x3部分的逆矩阵的转置矩阵。

注意,大部分的资源都会将法线矩阵定义为应用到模型-观察矩阵(Model-view Matrix)上的操作,但是由于我们只在世界空间中进行操作(不是在观察空间),我们只使用模型矩阵。

1.1 法向量如何转换为世界空间坐标?

对法向量实施缩放和旋转变换。

乘以一个模型矩阵?

Problem: 模型矩阵执行了不等比缩放,顶点的改变会导致法向量不再垂直于表面了

在这里插入图片描述

逆矩阵(Inverse Matrix)
转置矩阵(Transpose Matrix)

1.2

使用inverse和transpose函数自己生成这个法线矩阵,这两个函数对所有类型矩阵都有效
Normal = mat3(transpose(inverse(model))) * aNormal;

矩阵求逆对于着色器运算开销很大,因为它必须在场景中的每一个顶点上进行,应尽可能避免在着色器中进行求逆运算。先在CPU上计算出法线矩阵,再通过uniform把它传递给着色器(就像模型矩阵一样)。

猜你喜欢

转载自blog.csdn.net/thefist11cc/article/details/127001805
今日推荐