我正在尝试在我们的游戏项目中实现阴影贴图.我使用渲染到纹理技术与两次渲染渲染.我首先创建了一个FBO并仅为深度组件绑定了一个纹理.在第一遍中,我启用此FBO,禁用纹理并从轻POV渲染我的场景.在第二遍中,我将深度纹理传递给着色器并正常渲染场景.我在着色器中执行与阴影相关的计算.
但是,我的代码无法正常工作.我无法看到任何影子.此外,当我渲染两个传球时,如果我的相机看上面某个角度,我会看到整个世界的多个绘图一个接一个地跟踪:45.如果我看到那个角度以下,渲染看起来没问题.可能是这个问题的根源是什么?.如果我禁用第一个传球,世界看起来更暗但是尾随场景消失了.我还附上了我的代码.

我还有另一个困惑.我已经为第一个shadowmap传递禁用了纹理.但是我将带有顶点坐标的纹理坐标发送到VBO.这会导致任何问题吗?
FBO初始化
LightPosition = glm::vec3(50.0f, 40.0f, 50.0f);
upVector = glm::vec3(0.0f, 1.0f, 0.0f);
glGenTextures(1, &m_shadowMap);
glBindTexture(GL_TEXTURE_2D, m_shadowMap);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32,
WindowWidth, WindowHeight, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL);
glBindTexture(GL_TEXTURE_2D, 0);
glGenFramebuffers(1, &m_fbo);
glBindFramebuffer(GL_FRAMEBUFFER, m_fbo);
glDrawBuffers(0, NULL);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_shadowMap, 0);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
GLenum Status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if (Status != GL_FRAMEBUFFER_COMPLETE) {
printf("FB error, status: 0x%x\n", Status);
return …Run Code Online (Sandbox Code Playgroud)