小编use*_*566的帖子

使用FBO进行OpenGL阴影映射 - 多次拖尾绘制

我正在尝试在我们的游戏项目中实现阴影贴图.我使用渲染到纹理技术与两次渲染渲染.我首先创建了一个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)

opengl glsl

6
推荐指数
1
解决办法
2024
查看次数

标签 统计

glsl ×1

opengl ×1