#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. Хорошо, что вы нашли ошибку. Я удивлен, что сам этого не заметил.