From 5eb23a521e2977b0f29e4c27a7f50da64faa3cd4 Mon Sep 17 00:00:00 2001 From: cathy0612 Date: Sun, 2 Feb 2020 19:59:44 +0800 Subject: [PATCH 1/5] inexplicable indents --- .../03 Shadows/01 Shadow Mapping.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md b/docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md index 20875cc..1414d0d 100644 --- a/docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md +++ b/docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md @@ -91,9 +91,9 @@ glBindFramebuffer(GL_FRAMEBUFFER, 0); // 1. 首选渲染深度贴图 glViewport(0, 0, SHADOW_WIDTH, SHADOW_HEIGHT); glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO); - glClear(GL_DEPTH_BUFFER_BIT); - ConfigureShaderAndMatrices(); - RenderScene(); +glClear(GL_DEPTH_BUFFER_BIT); +ConfigureShaderAndMatrices(); +RenderScene(); glBindFramebuffer(GL_FRAMEBUFFER, 0); // 2. 像往常一样渲染场景,但这次使用深度贴图 glViewport(0, 0, SCR_WIDTH, SCR_HEIGHT); @@ -172,8 +172,8 @@ glUniformMatrix4fv(lightSpaceMatrixLocation, 1, GL_FALSE, glm::value_ptr(lightSp glViewport(0, 0, SHADOW_WIDTH, SHADOW_HEIGHT); glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO); - glClear(GL_DEPTH_BUFFER_BIT); - RenderScene(simpleDepthShader); +glClear(GL_DEPTH_BUFFER_BIT); +RenderScene(simpleDepthShader); glBindFramebuffer(GL_FRAMEBUFFER, 0); ``` From 14f2e823e593852b414e5a1e194ced4ada6c1767 Mon Sep 17 00:00:00 2001 From: cathy0612 Date: Sun, 2 Feb 2020 20:02:29 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E8=AF=AD=E5=8F=A5=E4=B8=8D=E9=80=9A?= =?UTF-8?q?=E9=A1=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md b/docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md index 1414d0d..7cafcf3 100644 --- a/docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md +++ b/docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md @@ -83,7 +83,7 @@ glReadBuffer(GL_NONE); glBindFramebuffer(GL_FRAMEBUFFER, 0); ``` -我们需要的只是在从光的透视图下渲染场景的时候深度信息,所以颜色缓冲没有用。然而帧缓冲对象不是完全不包含颜色缓冲的,所以我们需要显式告诉OpenGL我们不适用任何颜色数据进行渲染。我们通过将调用glDrawBuffer和glReadBuffer把读和绘制缓冲设置为GL_NONE来做这件事。 +我们需要的只是在从光的透视图下渲染场景的时候深度信息,所以颜色缓冲没有用。然而,不包含颜色缓冲的帧缓冲对象是不完整的,所以我们需要显式告诉OpenGL我们不适用任何颜色数据进行渲染。我们通过将调用glDrawBuffer和glReadBuffer把读和绘制缓冲设置为GL_NONE来做这件事。 合理配置将深度值渲染到纹理的帧缓冲后,我们就可以开始第一步了:生成深度贴图。两个步骤的完整的渲染阶段,看起来有点像这样: From f2a4d7c498c08a3bf58ac4042185c81d46daa804 Mon Sep 17 00:00:00 2001 From: cathy0612 Date: Sun, 2 Feb 2020 20:32:30 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E9=94=99=E8=AF=AF=E6=A0=87=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md b/docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md index 7cafcf3..ff4a49a 100644 --- a/docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md +++ b/docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md @@ -308,7 +308,7 @@ float ShadowCalculation(vec4 fragPosLightSpace) 当使用正交投影矩阵,顶点w元素仍保持不变,所以这一步实际上毫无意义。可是,当使用透视投影的时候就是必须的了,所以为了保证在两种投影矩阵下都有效就得留着这行。 -因为来自深度贴图的深度在0到1的范围,我们也打算使用projCoords从深度贴图中去采样,所以我们将NDC坐标变换为0到1的范围: +因为来自深度贴图的深度在0到1的范围,我们也打算使用projCoords从深度贴图中去采样,所以我们将NDC坐标变换为0到1的范围。 (译者注:这里的意思是,上面的projCoords的xyz分量都是[-1,1](下面会指出这对于远平面之类的点才成立),而为了和深度贴图的深度相比较,z分量需要变换到[0,1];为了作为从深度贴图中采样的坐标,xy分量也需要变换到[0,1]。所以整个projCoords向量都需要变换到[0,1]范围。) ```c++ From ed6de77d0882af48ab7469c5054d7f1eddbd502a Mon Sep 17 00:00:00 2001 From: cathy0612 Date: Sun, 2 Feb 2020 20:32:46 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E8=AF=AD=E5=8F=A5=E4=B8=8D=E9=80=9A?= =?UTF-8?q?=E9=A1=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md b/docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md index ff4a49a..c6aec58 100644 --- a/docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md +++ b/docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md @@ -420,7 +420,7 @@ RenderSceneToDepthMap(); glCullFace(GL_BACK); // 不要忘记设回原先的culling face ``` -这十分有效地解决了peter panning的问题,但只针对实体物体,内部不会对外开口。我们的场景中,在立方体上工作的很好,但在地板上无效,因为正面剔除完全移除了地板。地面是一个单独的平面,不会被完全剔除。如果有人打算使用这个技巧解决peter panning必须考虑到只有剔除物体的正面才有意义。 +这十分有效地解决了peter panning的问题,但只对内部不会对外开口的实体物体有效。我们的场景中,在立方体上工作的很好,但在地板上无效,因为正面剔除完全移除了地板。地面是一个单独的平面,不会被完全剔除。如果有人打算使用这个技巧解决peter panning必须考虑到只有剔除物体的正面才有意义。 另一个要考虑到的地方是接近阴影的物体仍然会出现不正确的效果。必须考虑到何时使用正面剔除对物体才有意义。不过使用普通的偏移值通常就能避免peter panning。 From 2be023a1c1ce5333fe716a7c0a9043338fbdf601 Mon Sep 17 00:00:00 2001 From: cathy0612 Date: Sun, 2 Feb 2020 22:56:18 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=AF=AD=E5=8F=A5?= =?UTF-8?q?=E4=B8=8D=E9=80=9A=E9=A1=BA=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md b/docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md index c6aec58..790bf73 100644 --- a/docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md +++ b/docs/05 Advanced Lighting/03 Shadows/01 Shadow Mapping.md @@ -517,7 +517,7 @@ shadow /= 9.0; 透视投影对于光源来说更合理,不像定向光,它是有自己的位置的。透视投影因此更经常用在点光源和聚光灯上,而正交投影经常用在定向光上。 -另一个细微差别是,透视投影矩阵,将深度缓冲视觉化经常会得到一个几乎全白的结果。发生这个是因为透视投影下,深度变成了非线性的深度值,它的大多数可辨范围接近于近平面。为了可以像使用正交投影一样合适的观察到深度值,你必须先讲过非线性深度值转变为线性的,我们在深度测试教程中已经讨论过。 +另一个细微差别是,透视投影矩阵,将深度缓冲视觉化经常会得到一个几乎全白的结果。发生这个是因为透视投影下,深度变成了非线性的深度值,它的大多数可辨范围都位于近平面附近。为了可以像使用正交投影一样合适地观察深度值,你必须先将非线性深度值转变为线性的,如我们在深度测试教程中已经讨论过的那样。 ```c++ #version 330 core