光照
- 环境光颜色与漫反射颜色相乘作为环境光
法线
将法线由模型空间变换到世界空间
- 使用去除平移后的模型矩阵的逆转置矩阵,需要再CPU端进行计算。(如果模型矩阵不包含非同一缩放,逆转置矩阵等于模型矩阵)
glm::mat3 normalMatrix = glm::transpose(glm::inverse(glm::mat3(modelMatrix)))
法线贴图
- 贴图 * R:切线方向(Tangent)的法线分量(X轴,范围 [0, 1]→ [-1, 1]) * G:副切线方向(Bitangent)的法线分量(Y轴,范围 [0, 1]→ [-1, 1]) * B:法线方向(Normal)的分量(Z轴,通常 ≥0.5,因为Z为主方向)
- 需要映射到[-1,1],
vec3 tangentNormal = normalTex * 2.0 - 1.0; // 从[0,1]映射到[-1,1]
- 通过TBN矩阵从切线空间转换到世界空间
1 2 3 4 5 6 7 8
// w设置为0可以去除平移分量 vec3 T = normalize(vec3(model * vec4(a_tangent, 0.0))); vec3 B = normalize(vec3(model * vec4(a_bitangent, 0.0))); vec3 N = normalize(vec3(model * vec4(aNormal, 0.0))); TBN = mat3(T, B, N); ... vec3 worldNormal = normalize(TBN * tangentNormal);