opengl — зажим текстуры не работает при последующей обработке

#c #opengl #textures

#c #opengl #Текстуры

Вопрос:

У меня проблема с последующей обработкой в моем отложенном средстве визуализации. Когда я применяю эффект, подобный цветению, поверх моей сцены, нижняя часть текстуры эффекта цветения просачивается в верхнюю часть моего экрана, верхняя часть текстуры просачивается в нижнюю часть экрана, левая — в правую часть экрана и так далее. Похоже, что координаты uv не закрепляются правильно, хотя я думал, что все правильно установил.

Эффект цветения в этом случае создается в более низком разрешении, а дискретизация увеличивается с использованием линейной фильтрации.

Это изображение, которое показывает проблему:

изображение

Я визуализирую эффекты постобработки с помощью простого квадрата:

 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, amp;_filterFbo);
glBindFramebuffer(GL_FRAMEBUFFER, _filterFbo);

// filter texture
glGenTextures(1, amp;_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);
  

Я действительно не знаю, в чем здесь проблема, надеюсь, у кого-нибудь есть идея.

Комментарии:

1. Из того, что вы показали, я не вижу ничего, что выделяется как неправильное. Это может вам помочь, поскольку вы упомянули о создании эффекта цветения с помощью отложенного шейдера; однако на этом веб-сайте с обучающей страницей, который я собираюсь вам показать, есть полная 3D-сцена, визуализируемая с освещением и в обычном режиме, а также с использованием нескольких шейдерных программ. Это должно послужить отличным руководством относительно того, как можно достичь эффекта цветения вместе с некоторыми его вариантами. learnopengl.com /#!Дополнительно-Освещение/ Цветение

2. спасибо за ссылку! Между тем я получил решение своей проблемы, это была просто опечатка.. Я привязал к GL_TEXTURE_2D_ARRAY вместо GL_TEXTURE_2D

3. Хорошо, что вы нашли ошибку. Я удивлен, что сам этого не заметил.