diff --git a/02 Lighting/02 Basic Lighting.md b/02 Lighting/02 Basic Lighting.md new file mode 100644 index 0000000..8541541 --- /dev/null +++ b/02 Lighting/02 Basic Lighting.md @@ -0,0 +1,37 @@ +本文作者JoeyDeVries,由Geequlim翻译自[http://learnopengl.com](http://learnopengl.com/#!Lighting/Colors) + +##基本光源(或者照明?) + +现实世界中,光源及其复杂,还取决于额很多因素,有时在我们仅有的处理能力下不能简单计算出。因此在OpenGL中光源是基于现实情况建立了简化模型,更容易处理,看上去(与真实情况)较为相似。这些光照模型是基于我们理解的光的物理特性建立的。其中一个模型被称为冯氏照明模式。冯氏模型 +的主要构成模块由3部分组成:环境光,漫射光和反射光。下面你将看到这些照明组件实际上是什么样子: +![](http://www.learnopengl.com/img/lighting/basic_lighting_phong.png) + +* 环境光:即使是黑暗中在世界上其他地方都会有些灯光(月亮,一个遥远的灯光)所以物体经常不会是完全黑暗的。为了模拟它,我们使用了一个环境光常数给物体一点颜色。 +* 漫反射光:模拟一个光照对象对另一个对象的定向影响。这是光照模型中最重要的视觉组成部分。一个物体面向光源的部分越多,那部分就越明亮。 +* 镜面光:模拟一个光源的亮点。镜面光更倾向于灯光的颜色而非物体的颜色。 + +为了创建一个视觉享受的场景,我们至少要模拟这3个照明组件。首先从最简单的开始:环境光。 + +##环境光 + +光通常不是一个单一的光源,而是来自于围绕在我们周围的许多分散光源,即使它们不是立即可见的。光的特性之一就是它可以经许多方向的分散并反弹后到达特定点,即使最初并不是在它附近;光可以反射到其他表面,并对物体有间接的光照作用。将这些因素考虑进去的就是全局照明算法,但是这样花销太大/太复杂。 + +因为我们不是一个复杂算法的big fan,我们使用一个全局照明的简单模型,叫做环境光照明。正如我们在上一章节中使用的一个小的颜色(光照)常数,将其添加到物体片段的最终生成的颜色上,尽管看起来没有直接光源,还是有一些分散的光线。 + +在场景里增加环境光很容易。我们将光源的颜色,乘以一个小的环境因素常数,再将结果乘以物体的颜色,最终将他作为片元的颜色。 + + void main() + { + float ambientStrength = 0.1f; + vec3 ambient = ambientStrength * lightColor; + + vec3 result = ambient * objectColor; + color = vec4(result, 1.0f); + } + +如果你现在运行你的程序,你会发现到光照的第一阶段被成功应用到你的物体。这个物体比较暗,但并不是完全黑暗不可见因为应用了环境光照明(注意那个明亮的立方体是不受影响的,因为我们使用的是不同的着色),它应该看起来是这样: +![](http://www.learnopengl.com/img/lighting/ambient_lighting.png) + +##漫反射光 + +