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

来源:互联网 发布:php装修公司网站源码 编辑:程序博客网 时间:2024/04/30 21:39

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


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


0 0
原创粉丝点击