针对复杂模型时,切线往往是经过许多顶点计算的,这样就可以得到一个平均值来获得平滑的结果,这样会造成一个问题,那就是T、B、N三个向量可能不会相互垂直了,也就是TBN矩阵不是正交的了。 针对这一问题,我们可以使用格拉姆施密特方法来重新正交化TBN矩阵,在顶点着色器中这么做:
vec3 T
= normalize(vec3(model
* vec4(aTangent
, 0.0)));
vec3 N
= normalize(vec3(model
* vec4(aNormal
, 0.0)));
T
= normalize(T
- dot(T
, N
) * N
);
vec3 B
= cross(N
, T
);
mat3 TBN
= mat3(T
, B
, N
)
原文链接:https://www.jianshu.com/p/d9c6441585f4