冯氏光照模型的主要结构由3个分量组成:环境(Ambient)、漫反射 (Diffuse)和镜面(Specular)光照
最终片段颜色:环境颜色+漫反射颜色+镜面反射颜色
R=reflect(L, N)
SpecularFactor = power(max(0, dot(R,V)), shininess)
投光物主要有三种: 定向光 (太阳光)、 点光 (电灯泡)、 聚光 (手电筒)
以下是三种投光物对应的顶点着色器和片段着色器的实现。顶点着色器没有什么差别,它们的不同点体现在片段着色器。
顶点着色器
片段着色器
第一列指定的是光所能覆盖的距离,第二、三、四列分别为 Kc、Kl 、 Kq
三. 聚光
需要模拟聚光有一个内圆锥(Inner Cone)和一个外圆锥(Outer Cone)
计算intensity ,在内圆锥与外圆锥之间平滑插值,内圆锥之内恒为1,外圆锥之外恒为0
多光源指的是多个投光物同时存在于同一场景,这时对片段颜色的计算即是对多个投光物计算结果的累计叠加
参考资料:
https://learnopengl-cn.github.io/02%20Lighting/05%20Light%20casters/
https://learnopengl-cn.github.io/02%20Lighting/06%20Multiple%20lights/