Cesium高级教程-自定义光源-光照原理
光照原理
关于光照原理可以参考WebGL编程指南
第八章的相关内容,里面有非常详细的介绍。本章的重点在于如何在Cesium中去实现,而不是研究光照的原理,要看原理随便百度一下文章多如牛毛。
获取 WebGL编程指南
可以百度搜索下载电子版,或者联系作者获取
在编程世界中,所有抽象的问题最后最会都可以转变为数学公式的表达,以点光源为例,计算公式为 最后的颜色=光源颜色 x 物体基底色 x( 光线方向 . 物体法线 )
,所以如果要在Cesium中实现点光源,首先需要弄明白公式中每个参与运算的变量是什么?如何获取?
运算变量
最后的颜色:计算结果 RGBA
光源颜色:光的颜色 RGBA
物体基底色:即物体自有的颜色 RGBA
光线方向:光源到片元的方向(向量)XYZ
物体法线:物体表面法线(向量)XYZ
在Cesium中实现
整个计算过程是在片元着色器中进行的,在Cesium实现可以有多中方式,比如您可以通过自定义材质属性MaterialProperty
在实体中进行实现,也可以通过外观Appearance
在图元中实现,但是最常见的是在Cesium3DTileset
和后处理中实现,因为在实体和图元中实现光源的意义不大。
在后处理中实现的优势是光源作用于整个场景内容,不需要每个物体都进行单独处理。但是在Cesium3DTileset
中实现也很常见,因为有时可能就只想添加模型的灯光想效果,其他地方不需要处理。
接下来我们以点光源为例,分别介绍在Cesium3DTileset
和后处理中实现的过程。
更多内容见 Cesium高级教程-教程简介