openGL学习----光照
0.光照处理时候,向量点乘一定要是标准化后的单位向量!!!
1.冯氏光照模型:光照=环境光+漫反射+镜面反射
vec3 result = ambient + diffuse + specular;
一般每一项的计算又分为几个小部分 partLight = S * K * M * O;
S指光源颜色,K指这部分光照的显示强度(一般来说环境光强度最弱,系数最小,镜面反射最大,漫反射居中),M指的是影响系数(由各种夹角计算出来,环境管不管,漫反射由入射向量和法线向量点积而得,但是注意是标准化后的向量,镜面先取反射向量,再和观察视线点积,也要注意单位向量的问题),O指的是物体本身的颜色(一般为纹理贴图的颜色),这一项其实也就是我们常说的材质materia
2.物体的材质materia实际上可以简单地理解为物体的贴图,也就是他所展示出来的颜色信息。其中有又分为漫反射贴图和镜面反射贴图。他们在相同光照下所反射的颜色不同
这两张图片一个是漫反射的贴图,一个是镜面反射贴图。他们都要加到同一个箱子上,然后渲染。第一个负责环境光和漫反射部分,后者负责镜面反射部分。这样才能将箱子四周的钢铁的镜面反射效果表现出来
3.光照模型其实也分为好多种:平行光(又叫定向光direction light)、点光源(point light)、聚光(spotlight),每种具体的光源渲染细节不同,但是大概结构相似,都满足1中的基本模型解释,只不过在细节和逼真度方面做了调整。具体参看https://learnopengl-cn.github.io/02%20Lighting/05%20Light%20casters/
4.三种不同光照模型的片元着色器跟顶点着色器代码见另一篇博客:https://www.cnblogs.com/guopinghai/p/9817847.html,具体完整代码可参见我的git:https://github.com/guopeiming/learnOpenGL/tree/master/exerciseCode/forth_light