1
0
mirror of https://github.com/LearnOpenGL-CN/LearnOpenGL-CN.git synced 2025-08-23 12:45:29 +08:00
Files
LearnOpenGL-CN/02 Lighting/02 Basic Lighting.md
2015-06-16 10:57:21 +08:00

38 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

本文作者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)
##漫反射光