总结一下光照部分的知识

生活中我们所看到的物体所呈现出来的颜色,其实是它反射光源造成的,我们在OpenGL里面模拟光照,实质上就是通过各种方式计算出反射光源。


 

首先,我们学习了“颜色”这一小章节,核心知识就是物体本身的颜色(矩阵)乘以光源颜色(矩阵),得到的就是物体反射的颜色。

为了模拟物体更加真实的效果,我们接着学习了“基础光照”,核心知识是冯氏光照模型,由此引入了环境光(ambient),漫反射光(diffuse),以及镜面光(specular)。

然后是”材质“章节,在冯氏光照模型的基础上,将物体和光源都设定了几个光照分量(结构体的形式),实现了对环境光,漫反射光,镜面光更加精准的控制。于此同时,还有一个反光度(shininess)的概念,也就是物体表面高光块的大小,数值越大高光块越小。

“材质”之后是“光照贴图”,我们将前面学习的纹理结合进来,使得物体表面更加细节(不再是同一种颜色),同时将物体的环境光分量以及漫反射光分量设置为统一贴图纹理,将镜面光设置为另一贴图纹理,可实现更加真实的效果。

还有“投光物(Light caster)”,讨论了定向光,点光源,以及聚光。定向光既平行光,类似于太阳;点光源新加入了一个光强衰减的函数,也即随着距离的增加,刚开始光强下降得很快,后来下降程度会变慢;聚光类似于我们生活中的手电筒,只有一束扇形的光照区域,但是普通实现的聚光边缘有一边硬圈(也就是过渡不自然),需要我们加入一个平滑/软化边缘的函数,运算结果加到光照效果中。

最后一章是“多光源”,将上面的定向光,点光源,聚光都结合了起来,用函数重构了每种光源的实现,简化了片段着色器的结构。

大致如此,除了一开始的颜色以及基础光照章节,其他的章节其实都很简单,基本上没有学习新的东西,只是将学过的知识,代码进行重构(重写类,重写函数)或者换一个角度去解决某些问题(比如引入物体对应的三个光照分量,使得实现效果更加精准,更加易于控制)。

总结:还阔以(好敷衍)。

posted @ 2019-10-17 09:10  jckcoenf  阅读(345)  评论(0编辑  收藏  举报