opengl - 纹理夹紧在后期处理中不起作用

时间:2016-10-05 15:30:11

标签: c++ opengl textures

我的延迟渲染器中的后期处理有问题。 当我在场景顶部应用像bloom这样的效果时,绽放效果纹理的底部会泄漏到我的屏幕顶部,纹理的顶部会泄漏到屏幕的底部,左边会进入屏幕的左边的屏幕等。 看起来uv coords没有被正确钳制,虽然我认为我已经正确设置了。

在这种情况下,bloom效果以较低的分辨率创建,并使用线性过滤进行上采样。

此图片显示问题:

image

我使用简单的四边形渲染后处理效果:

glm::vec3(-1.f, -1.f, 0.f),
glm::vec3(1.f, -1.f, 0.f),
glm::vec3(1.f, 1.f, 0.f),
glm::vec3(-1.f, 1.f, 0.f)

这是我用来渲染四边形的顶点着色器:

#version 430 core

layout(location = 0) in vec3 POSITION;

noperspective out vec2 tex_coord;

void main(void)
{
    tex_coord = POSITION.xy * 0.5 + 0.5;

    gl_Position = vec4(POSITION.xy, 0.0, 1.0);
}

如果片段着色器中的课程我做了这样的事情:

#version 430 core

uniform sampler2D uTexture;

noperspective in vec2 tex_coord;

out vec4 frag_color;

void main(void)
{
    frag_color = texture(uTexture, tex_coord);
}

效果被渲染到帧缓冲区对象中,该对象设置如下:

glGenFramebuffers(1, &_filterFbo);
glBindFramebuffer(GL_FRAMEBUFFER, _filterFbo);

// filter texture
glGenTextures(1, &_filterTexture);
glBindTexture(GL_TEXTURE_2D, _filterTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, _effectWidth, _effectHeight, 0, GL_RGB, GL_FLOAT, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, _filterTexture, 0);

我真的不知道这里的问题是什么,我希望有人有个主意。

0 个答案:

没有答案