From 716a12a751d99690ee8f31c86b66f3e6a006f793 Mon Sep 17 00:00:00 2001 From: AaronRobert Date: Sun, 24 Jun 2018 10:28:04 +0800 Subject: [PATCH] finish chapter 10 --- source/10-let-there-be-light.md | 65 +++++++++++++++++++++++++ source/_static/10/lightning_result.png | Bin 0 -> 90832 bytes 2 files changed, 65 insertions(+) create mode 100644 source/_static/10/lightning_result.png diff --git a/source/10-let-there-be-light.md b/source/10-let-there-be-light.md index c3dfafe..2025dfc 100644 --- a/source/10-let-there-be-light.md +++ b/source/10-let-there-be-light.md @@ -322,3 +322,68 @@ void main() } ``` +调用setupColours函数将使用适当的颜色来设置变量ambientC、diffuseC和speculrC。然后,我们计算漫射和高光分量,并考虑衰减。为了方便,我们使用单个函数调用来完成此操作,如上所述。最终的颜色是通过添加环境光分量来计算的(将ambientC乘以环境光)。正如你所看到的,环境光不受衰减的影响。 + +在着色器中我们引入了一些需要进一步解释的新概念,定义结构体并将它们用作uniform。但我们要怎么传递这些结构体?首先,我们将定义两个新类,它们模拟点点光源和材质的特性,名为`PointLight`和`Material`。它们只是普通的POJO,所以你可以在本书附带的源代码中查看它们。然后,我们需要在ShaderProgram类中创建新方法,首先要能够为点光源和材质结构创建uniform。 + +```java +public void createPointLightUniform(String uniformName) throws Exception { + createUniform(uniformName + ".colour"); + createUniform(uniformName + ".position"); + createUniform(uniformName + ".intensity"); + createUniform(uniformName + ".att.constant"); + createUniform(uniformName + ".att.linear"); + createUniform(uniformName + ".att.exponent"); +} + +public void createMaterialUniform(String uniformName) throws Exception { + createUniform(uniformName + ".ambient"); + createUniform(uniformName + ".diffuse"); + createUniform(uniformName + ".specular"); + createUniform(uniformName + ".hasTexture"); + createUniform(uniformName + ".reflectance"); +} +``` + +正如你所看到的,它非常简单,我们只为构成结构体的所有属性创建一个单独的uniform。现在我们需要创建另外两个方法来设置这些uniform的值,并且将使用参数`PointLight`和材质的实例。 + +```java +public void setUniform(String uniformName, PointLight pointLight) { + setUniform(uniformName + ".colour", pointLight.getColor() ); + setUniform(uniformName + ".position", pointLight.getPosition()); + setUniform(uniformName + ".intensity", pointLight.getIntensity()); + PointLight.Attenuation att = pointLight.getAttenuation(); + setUniform(uniformName + ".att.constant", att.getConstant()); + setUniform(uniformName + ".att.linear", att.getLinear()); + setUniform(uniformName + ".att.exponent", att.getExponent()); +} + +public void setUniform(String uniformName, Material material) { + setUniform(uniformName + ".ambient", material.getAmbientColour()); + setUniform(uniformName + ".diffuse", material.getDiffuseColour()); + setUniform(uniformName + ".specular", material.getSpecularColour()); + setUniform(uniformName + ".hasTexture", material.isTextured() ? 1 : 0); + setUniform(uniformName + ".reflectance", material.getReflectance()); +} +``` + +在本章源代码中,你还将看到我们还修改了`Mesh`类来存放材质实例,并且我们创建了一个简单的示例,并在其中创建了一个可用“N”和“M”键控制移动的点光源,以显示点光源聚焦在反射率值高于0的网格上时是怎样的。 + +让我们回到片段着色器,正如我们所说的,我们需要另一种包含相机位置camera_pos的uniform。这些坐标必须位于视图空间中。通常我们将在世界空间坐标中设置光坐标,因此我们需要将它们乘以视图矩阵以便能够在着色器中使用它们,所以我们需要在`Transformation`类中创建一个新方法,该方法返回视图矩阵让我们转换光照坐标。 + +```java +// 获得光源对象的副本并将它的坐标转换为视图坐标 +PointLight currPointLight = new PointLight(pointLight); +Vector3f lightPos = currPointLight.getPosition(); +Vector4f aux = new Vector4f(lightPos, 1); +aux.mul(viewMatrix); +lightPos.x = aux.x; +lightPos.y = aux.y; +lightPos.z = aux.z; +shaderProgram.setUniform("pointLight", currPointLight); +``` + +我们不会在这里引用整个源代码,因为如果这样这一章就太长了,对于解释概念并没有太多的作用。您可以在本书附带的源代码中查看它。 + +![Lightning results](_static/10/lightning_result.png) + diff --git a/source/_static/10/lightning_result.png b/source/_static/10/lightning_result.png new file mode 100644 index 0000000000000000000000000000000000000000..3c1300358df05a262017c643bb659f16d2d86bec GIT binary patch literal 90832 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