Текстура перевернулась при использовании fbo

0

У меня есть 2 текстуры (пустые, с данными), я прикрепляю пустой к fbo, затем использую текстуру с привязкой и обрабатываю ее в шейдерах и вытягиваю вывод в fbo. Затем я рисую текстуру в fbo, чтобы разглядеть. Он отлично работает, однако текстура перевертывает каждый кадр следующим образом: Изображение 174551

Я знаю, что это имеет какое-то отношение к координатам текстуры, но как я могу это исправить?

Изменение: функция рендеринга

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);

glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo);
glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, n_box_texture[1 - n_source_tex], 0);


glViewport(0, 0, datawidth, dataheight);
glClear ( GL_COLOR_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D, n_box_texture[n_source_tex]);

glUseProgram(n_program_object);
{
    glUniform1i(n_box_sampler_uniform, 0);
}

DrawScene();

glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glViewport(0, 0, n_width, n_height);

glBindTexture(GL_TEXTURE_2D, n_box_texture[1 - n_source_tex]);
glGenerateMipmap(GL_TEXTURE_2D);

n_source_tex = 1 - n_source_tex;

glClear(GL_COLOR_BUFFER_BIT);

Matrix4f t_mvp;
{
    Matrix4f t_projection;
    CGLTransform::Perspective(t_projection, 90, float(n_width) / n_height, .01f, 1000);

    Matrix4f t_modelview;
    t_modelview.Identity();
    t_modelview.Translate(0, 0, -2.5f);

    t_mvp = t_projection * t_modelview;
}

glUseProgram(n_program_object_pass); 
{
    glUniformMatrix4fv(n_mvp_matrix_uniform_pass, 1, GL_FALSE, &t_mvp[0][0]);
    glUniform1i(n_box_sampler_uniform_pass, 0);
}

DrawScene();

driver.Blit();

Изменение: шейдеры

Обработка шейдеров:

#version 330
in vec2 v_tex;
in vec3 v_pos;
out vec2 v_texcoord;

void main()
{
gl_Position = vec4(v_pos, 1.0);
v_texcoord = v_tex;
}


#version 330
in vec2 v_texcoord;
out vec4 frag_color;
uniform sampler2D n_box_tex;

void main()
{
float temp;
temp =  texture(n_box_tex, v_texcoord).r + 
    texture(n_box_tex, v_texcoord+vec2(0,0.01)).r + 
    texture(n_box_tex, v_texcoord+vec2(0.01,0.01)).r + 
    texture(n_box_tex, v_texcoord+vec2(0.01,0)).r;
temp = temp/4.0;
frag_color = temp * vec4(1.0, 1.0, 1.0, 1.0);
}

Шейдеры для передачи текстуры для вывода:

#version 330
in vec2 v_tex;
in vec3 v_pos;
uniform mat4 t_modelview_projection_matrix;
out vec2 v_texcoord;

void main()
{
gl_Position = t_modelview_projection_matrix * vec4(v_pos, 1.0); /
v_texcoord = v_tex;
}


#version 330
in vec2 v_texcoord;
out vec4 frag_color;
uniform sampler2D n_box_tex;

void main()
{
frag_color = texture(n_box_tex, v_texcoord).r * vec4(0.4, 1.0, 0.8, 1.0);
}
  • 0
    Вы должны включить источник источника шейдеров GL, если это возможно. Это так же вероятно, будет участвовать в перевороте оси Y.
  • 0
    Я добавил исходный код шейдеров
Теги:
opengl
render-to-texture

1 ответ

0
Лучший ответ

Починил это! Это было очень просто, у меня были неправильные координаты текстуры.

4 координаты вершин:

  • -1 -1
  • 1 -1
  • 1 1
  • -1 1

и соответствующие координаты текстуры:

  • 0 0
  • 1 0
  • 1 1
  • 0 1

Я имел:

  • 0 1
  • 1 1
  • 1 0
  • 0 0

Ещё вопросы

Сообщество Overcoder
Наверх
Меню