作者:mobiledu2502896655 | 来源:互联网 | 2023-07-24 11:15
平时我们习惯于说“在这里加上一个灯,照亮这个角落”例如在上面游戏中,可以看到一个路灯,发出柔和的光,照亮了地面和人物。我们总是误以为,这个灯在发光,但是其实这个灯并不是发
平时我们习惯于说 “在这里加上一个灯,照亮这个角落”

例如在上面游戏中,可以看到一个路灯,发出柔和的光,照亮了地面和人物。
我们总是误以为,这个灯在发光,但是其实这个灯并不是发光体。

在Unity等游戏引擎中,我们在编辑器里面创建一个灯光,然后在编辑器中能看到一个真实的灯光存在,可以调整位置,调整光的颜色等等。这很容易使用,但是却误导了我。

真实情况是,没有任何物体在发光,所谓的灯光,其实也只是一个普通的物体,只是这个物体(白色立方体)的Color ,会传入到其它的物体(下方棕色立方体)的Fragment Shader中进行颜色混合计算,然后我们就看到:其它物体(下方棕色立方体)的颜色受到了物体(白色立方体) 的颜色的影响,即我们说的 白色立方体 照亮了 下面的棕色立方体 。
后续我们就来模拟一个灯。
这一节首先创建一个场景,场景中包含一个白色的立方体作为灯泡 , 一个黄色的立方体作为灯下的物体。

这里使用了两种Shader,一种是用来模拟灯泡的 GLProgram_Light.h ,另一个模拟灯下面的物体 GLProgram_Cube.h 。
然后在 MyApp.h (Line 29) 中,分别使用两种Shader 绘制了物体和 灯泡,并且给物体设置了 黄色,给灯泡设置了白色。
示例工程下载:
http://pan.baidu.com/s/1skjV59b