blinn-Phong

251 阅读1分钟

公式

  • phong=环境光+漫反射+高光反射

环境光

  • 环境光: u_Ambient_intensities * u_Model_ambient;
    • 强度 x 模型颜色
    • 与光无关
    • 只是增加了颜色的强度

漫反射

  • 漫反射: max(dot(to_Light, Normal), 0.0) * u_Model_diffuse * vec4(u_Light_color, 1.0);
    • to_Light和Normal的角度cos x 光颜色 x 模型颜色
    • 只与光和法线有关,两个向量的cos越小,光颜色越强
    • 因为要乘模型颜色,所以不可能出现高光的情况
    • 不会动,所以跟V无关
    • 现实中,应该还有光照递减

高光

  • 高光反射: pow(max(dot(Normal, normalize(to_Light+to_Camera)), 0.0), u_shininess) * vec4(u_Light_color, 1.0) * u_Model_specular;
    • 半程向量和法线的角度cos pow x 光颜色 x 高亮颜色
    • 与光和眼睛和法线都有关,半程向量与法线角度越小,颜色越强
    • 因为不用乘模型颜色,只需要乘高光颜色,所以会出现高光
    • 高光与模型颜色无关
    • 高光会动,所以与V有关