LearnOpenGL_study -- 平行光,点光源,聚光源

平行光 只需要定义方向,不存在位置的问题,所有的物体都会接收到

点光源 只需要定义位置,方向由点光源位置减去物体位置决定。注意:点光源存在衰减问题,漫反射,镜面反射,环境光三个分量都需要乘以衰减系数!

下面这个表格显示了模拟一个(大概)真实的,覆盖特定半径(距离)的光源时,这些项可能取的一些值。第一列指定的是在给定的三项时光所能覆盖的距离。这些值是大多数光源很好的起始点,它们由Ogre3D的Wiki所提供:

距离 常数项 一次项 二次项
7 1.0 0.7 1.8
13 1.0 0.35 0.44
20 1.0 0.22 0.20
32 1.0 0.14 0.07
50 1.0 0.09 0.032
65 1.0 0.07 0.017
100 1.0 0.045 0.0075
160 1.0 0.027 0.0028
200 1.0 0.022 0.0019
325 1.0 0.014 0.0007
600 1.0 0.007 0.0002
3250 1.0 0.0014 0.000007

你可以看到,常数项KcKc在所有的情况下都是1.0。一次项KlKl为了覆盖更远的距离通常都很小,二次项KqKq甚至更小。尝试对这些值进行实验,看看它们在你的实现中有什么效果。在我们的环境中,32到100的距离对大多数的光源都足够了。

半径20:

LearnOpenGL_study -- 平行光,点光源,聚光源_第1张图片

半径:50

 LearnOpenGL_study -- 平行光,点光源,聚光源_第2张图片

半径:3250

LearnOpenGL_study -- 平行光,点光源,聚光源_第3张图片

聚光:

聚光是位于环境中某个位置的光源,它只朝一个特定方向而不是所有方向照射光线。这样的结果就是只有在聚光方向的特定半径内的物体才会被照亮,其它的物体都会保持黑暗。聚光很好的例子就是路灯或手电筒

LearnOpenGL_study -- 平行光,点光源,聚光源_第4张图片

虚化边缘

上图看上去并不自然,因此,我们可以设置两个圆锥,让光照强度在两个圆锥之间过渡:

LearnOpenGL_study -- 平行光,点光源,聚光源_第5张图片

 

LearnOpenGL_study -- 平行光,点光源,聚光源_第6张图片

你可能感兴趣的:(GameEngine,openGL)