渲染阴影
获得阴影的深度贴图
阴影映射
打开官方的实例源码使用了6个shader,前四个都在上个笔记中提到过。
剩下的两个shader的作用是正常的给予光照渲染,对每一个片段都判断是否在我们的阴影处,然后进行渲染,渲染的方式也很简单。
那么先看看最终效果
(优化后的)
(未优化的)
- 我们现在准备好了帧缓冲,里面也有了我们所需要的深度贴图,我们还需要正常的准备好我们的场景以及各种资源的绑定。将我们准备好的光源变换矩阵和深度贴图赋值给shader
shader.setVec3("viewPos", camera.Position);
shader.setVec3("lightPos", lightPos);
//光源变换矩阵的绑定
shader.setMat4("lightSpaceMatrix", lightSpaceMatrix);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, woodTexture);
glActiveTexture(GL_TEXTURE1);
//深度贴图的绑定
glBindTexture(GL_TEXTURE_2D, depthMap);
renderScene(shader);
- 顶点着色器
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aNormal;
layout (location = 2) in vec2 aTexCoords;
out vec2 TexCoords;
//代码块输出
out VS_OUT {
vec3 FragPos;
vec3 Normal;
vec2 TexCoords;
vec4 FragPosLightSpace;//经过矩阵转换的点
} vs_out;
uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;
uniform mat4 lightSpaceMatri