OpenGL ES 学习教程(七) 瞎子打灯,照亮他人,浅谈Ambient Lighting 环境光照

我是一个立方体,我头顶上有一个灯,但是我离灯太远了,所以你看我有一点暗淡。即时灯灭了,你也能找到我,因为还有天上的星星照耀。

OpenGL ES 学习教程(七) 瞎子打灯,照亮他人,浅谈Ambient Lighting 环境光照_第1张图片

Ambient Lighting 环境光照 描述的就是 在开放的空间中,物体会受到周围的 各种光源 的影响。物体可能会变暗,但是绝对不会变成纯黑。你一定能看见它。

如果我们要精确的计算不同的光源 对 物体的影响,那被成为 Global Illumination 全局光照,也许后面会学到,但是现在让我们来一个最简单的 Ambient Lighting。


想象一下,环境光 对物体会造成不太同的 明暗效果。我们只需要在 Fragment Shader 中,设置一个光照强度系数 ,就可以模拟。

上一节中,我们在 代码中设定了 lightColor,然后 Fragment Shader中 将 物体颜色和光照颜色相乘,得到最终的效果。


现在我再添加一个 光照强度系数 到 Fragment Shader中。

修改 GLProgram_Cube.h Line59 如下

const char* fragmentShader =
{
	"precision lowp float;"
	"uniform vec3 m_color;"
	"uniform vec3 m_lightcolor;"

	"void main()"
	"{"
	"   float ambientStrength=0.1;"
	"	vec3 ambient=ambientStrength * m_lightcolor;"
	"	vec3 result=ambient * m_color;"
	"	gl_FragColor=vec4(result,1.0);"
	"}"
};

添加了 光照强度系数 ambientStrength ,并且设置为 0.1 ,这样就模拟了物体收到比较弱的光照。

然后 ambientStrength 和 光照 颜色相乘。

再和 物体本身 颜色相乘。

得到最终效果:



示例工程下载:

http://pan.baidu.com/s/1mhhxRks


你可能感兴趣的:(unity3d,OpenGL,es,灯光)