mirror of
https://github.com/LearnOpenGL-CN/LearnOpenGL-CN.git
synced 2025-08-23 04:35:28 +08:00
第二篇译文
译文2的前半部分
This commit is contained in:
37
02 Lighting/02Basic Lighting.md
Normal file
37
02 Lighting/02Basic Lighting.md
Normal file
@@ -0,0 +1,37 @@
|
||||
本文作者JoeyDeVries,由Geequlim翻译自[http://learnopengl.com](http://learnopengl.com/#!Lighting/Colors)
|
||||
|
||||
##基本光源(或者照明?)
|
||||
|
||||
现实世界中,光源及其复杂,还取决于额很多因素,有时在我们仅有的处理能力下不能简单计算出。因此在OpenGL中光源是基于现实情况建立了简化模型,更容易处理,看上去(与真实情况)较为相似。这些光照模型是基于我们理解的光的物理特性建立的。其中一个模型被称为冯氏照明模式。冯氏模型
|
||||
的主要构成模块由3部分组成:环境光,漫射光和反射光。下面你将看到这些照明组件实际上是什么样子:
|
||||

|
||||
|
||||
* 环境光:即使是黑暗中在世界上其他地方都会有些灯光(月亮,一个遥远的灯光)所以物体经常不会是完全黑暗的。为了模拟它,我们使用了一个环境光常数给物体一点颜色。
|
||||
* 漫反射光:模拟一个光照对象对另一个对象的定向影响。这是光照模型中最重要的视觉组成部分。一个物体面向光源的部分越多,那部分就越明亮。
|
||||
* 镜面光:模拟一个光源的亮点。镜面光更倾向于灯光的颜色而非物体的颜色。
|
||||
|
||||
为了创建一个视觉享受的场景,我们至少要模拟这3个照明组件。首先从最简单的开始:环境光。
|
||||
|
||||
##环境光
|
||||
|
||||
光通常不是一个单一的光源,而是来自于围绕在我们周围的许多分散光源,即使它们不是立即可见的。光的特性之一就是它可以经许多方向的分散并反弹后到达特定点,即使最初并不是在它附近;光可以反射到其他表面,并对物体有间接的光照作用。将这些因素考虑进去的就是全局照明算法,但是这样花销太大/太复杂。
|
||||
|
||||
因为我们不是一个复杂算法的big fan,我们使用一个全局照明的简单模型,叫做环境光照明。正如我们在上一章节中使用的一个小的颜色(光照)常数,将其添加到物体片段的最终生成的颜色上,尽管看起来没有直接光源,还是有一些分散的光线。
|
||||
|
||||
在场景里增加环境光很容易。我们将光源的颜色,乘以一个小的环境因素常数,再将结果乘以物体的颜色,最终将他作为片元的颜色。
|
||||
|
||||
void main()
|
||||
{
|
||||
float ambientStrength = 0.1f;
|
||||
vec3 ambient = ambientStrength * lightColor;
|
||||
|
||||
vec3 result = ambient * objectColor;
|
||||
color = vec4(result, 1.0f);
|
||||
}
|
||||
|
||||
如果你现在运行你的程序,你会发现到光照的第一阶段被成功应用到你的物体。这个物体比较暗,但并不是完全黑暗不可见因为应用了环境光照明(注意那个明亮的立方体是不受影响的,因为我们使用的是不同的着色),它应该看起来是这样:
|
||||

|
||||
|
||||
##漫反射光
|
||||
|
||||
|
Reference in New Issue
Block a user