OpenGL 进阶系列07 - 阴影贴图(shadowmap )
一:概述:
在 OpenGL 中,Shadow Mapping(阴影贴图)是一种常用的实时阴影技术,用于渲染物体的阴影效果。这种方法通过生成光源视角下的深度贴图,再在场景渲染时使用它来判断物体是否被遮挡,从而实现阴影效果。下面是实现 Shadow Mapping 的基本步骤和相关知识。
二:绘制流程
-
从光源视角渲染深度贴图:
- 设置一个帧缓冲区(Framebuffer)和一个深度纹理来存储光源视角的深度信息。
- 使用光源的投影矩阵和视图矩阵渲染场景的深度信息到深度纹理中。该深度纹理称为“阴影贴图”。
-
渲染场景并应用阴影贴图:
- 从相机视角渲染整个场景。
- 在片段着色器中,将每个片段的世界坐标转换为光源的裁剪坐标系下的深度值。
- 将转换得到的深度值与阴影贴图中存储的深度值进行比较,判断片段是否在阴影中。
三:实现步骤
1. 创建阴影贴图
首先,设置一个用于存储深度信息的帧缓冲区和深度纹理:
GLuint depthMapFBO;
glGenFramebuffers(1,