冯氏光照
冯氏光照
冯氏光照主要结构由三个元素组成:环境(ambient),漫反射(Diffuse)和镜面光照。
- 环境光照:就是即使在非常黑暗的环境下,也有一丝的光(比如月光),这样使得物体表面也有一点颜色。
- 漫反射光照:模拟一个发光物对于物体的方向性影响。就是比如太阳光射过来,阳面肯定比阴面亮。
- 镜面反射:给物体表面打一个亮点,相比于物体的颜色,更倾向于光的颜色。
环境光照
利用code,把环境光照添加到场景中比较简单。首先给光的颜色乘以一个数值非常小的常量,之后在乘以物体的颜色,然后使用它作为片段的颜色。
void mian(){
float alpha = 0.1f;
vec3 ambient = alpha * lightColor;
vec3 result = ambient * objectColor;
color = vec4(result, 1.0f);
}
漫反射光照
漫反射使物体上与光线排布越近的片段,越能从光源处获得更多的亮度。这就使得漫反射光照会对物体产生更加显著的视觉影响。
- 1、需要什么来计算漫反射光照?
主要使用法向量和定向的法线去计算漫反射光照。 - 2、这里说的法向量是什么?
它是垂直于片段表面的一种向量(这里以黄色箭头表示)。
镜面光照
同样依据光的方向向量和物体的法向量,其次,它会依据观察方向。
我们计算反射向量R和视线方向的角度 &\theta&,如果之间的角度越小,那么镜面光的作用就会越大。它的作用效果就是,当我们去看光被物体所反射的那个方向的时候,我们会看到一个高光。
观察向量是镜面光照的一个附加变量,我们可以使用观察者世界空间位置和片段的位置来计算。之后,我们计算镜面光亮度,用它乘以光的颜色,在用它加上作为之前计算的光照颜色。