1
0
mirror of https://github.com/LearnOpenGL-CN/LearnOpenGL-CN.git synced 2025-08-22 20:25:28 +08:00

校对02 Lighting/06 Multiple lights,补全译文并更新图片

This commit is contained in:
SuperAo
2024-04-15 11:19:33 +08:00
committed by Gary Wang
parent 31168a4809
commit a8702fa38a
2 changed files with 6 additions and 2 deletions

View File

@@ -4,9 +4,9 @@
---|---
作者 | JoeyDeVries
翻译 | [Geequlim](http://geequlim.com), Krasjet
校对 | 暂未校对
校对 | [AoZhang](https://github.com/SuperAoao)
我们在前面的教程中已经学习了许多关于OpenGL中光照的知识其中包括冯氏着色(Phong Shading)、材质(Material)、光照贴图(Lighting Map)以及不同种类的投光物(Light Caster)。在这一节中,我们将结合之前学过的所有知识,创建一个包含六个光源的场景。我们将模拟一个类似太阳的定向光(Directional Light)光源,四个分散在场景中的点光源(Point Light),以及一个手电筒(Flashlight)。
我们在前面的教程中已经学习了许多关于OpenGL中光照的知识其中包括冯氏着色(Phong Shading)、材质(Material)、光照贴图(Lighting Map)以及不同种类的投光物(Light Caster)。在这一节中,我们将结合之前学过的所有知识,创建一个包含六个光源的完全照明场景。我们将模拟一个类似太阳的定向光(Directional Light)光源,四个分散在场景中的点光源(Point Light),以及一个手电筒(Flashlight)。
为了在场景中使用多个光源我们希望将光照计算封装到GLSL<def>函数</def>中。这样做的原因是,每一种光源都需要一种不同的计算方法,而一旦我们想对多个光源进行光照计算时,代码很快就会变得非常复杂。如果我们只在<fun>main</fun>函数中进行所有的这些计算,代码很快就会变得难以理解。
@@ -168,6 +168,10 @@ void main()
每个光源类型都将它们的贡献加到了最终的输出颜色上,直到所有的光源都处理完了。最终的颜色包含了场景中所有光源的颜色影响所合并的结果。如果你想的话,你也可以实现一个聚光,并将它的效果加到输出颜色中。我们会将<fun>CalcSpotLight</fun>函数留给读者作为练习。
!!! Important
在这种方法中有很多重复的计算在光类型函数上(例如计算反射向量,漫反射和高光项,以及对材料纹理进行采样),所以这里有优化的空间。
设置定向光结构体的uniform应该非常熟悉了但是你可能会在想我们该如何设置点光源的uniform值因为点光源的uniform现在是一个<fun>PointLight</fun>的数组了。这并不是我们以前讨论过的话题。
很幸运的是这并不是很复杂设置一个结构体数组的uniform和设置一个结构体的uniform是很相似的但是这一次在访问uniform位置的时候我们需要定义对应的数组下标值

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 KiB

After

Width:  |  Height:  |  Size: 199 KiB