phong 模型

Posted by shensunbo on August 25, 2025

光照

  1. 环境光颜色与漫反射颜色相乘作为环境光

法线

将法线由模型空间变换到世界空间

  1. 使用去除平移后的模型矩阵的逆转置矩阵,需要再CPU端进行计算。(如果模型矩阵不包含非同一缩放,逆转置矩阵等于模型矩阵)
  2. glm::mat3 normalMatrix = glm::transpose(glm::inverse(glm::mat3(modelMatrix)))

法线贴图

  1. 贴图 ​* ​R​​:切线方向(Tangent)的法线分量(X轴,范围 [0, 1]→ [-1, 1]) ​* ​G​​:副切线方向(Bitangent)的法线分量(Y轴,范围 [0, 1]→ [-1, 1]) ​* ​B​​:法线方向(Normal)的分量(Z轴,通常 ≥0.5,因为Z为主方向)
  2. 需要映射到[-1,1],vec3 tangentNormal = normalTex * 2.0 - 1.0; // 从[0,1]映射到[-1,1]
  3. 通过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);