阴影贴图(Shadow Mapping)是一种常见的实时阴影生成技术。它的基本思想是从光源的视角渲染场景并生成深度图,然后在实际渲染时使用这个深度图来确定哪些片段在阴影中。以下是阴影贴图的详细步骤和如何将其应用到顶点颜色上的解释。
阴影贴图的生成
- 从光源视角渲染场景:
- 使用光源的视角和投影矩阵渲染场景,生成一个深度图(阴影贴图)。这个深度图记录了从光源到场景中每个可见片段的距离。
// 顶点着色器(从光源视角)
#version 330 core
layout(location = 0) in vec3 aPos;
uniform mat4 lightSpaceMatrix;
uniform mat4 model;
void main()
{
gl_Position = lightSpaceMatrix * model * vec4(aPos, 1.0);
}
// 片段着色器(从光源视角)
#version 330 core
void main()
{
// 只写入深度值
gl_FragDepth = gl_FragCoord.z;
}