OpenGL кадровый буфер зависит от размера окна

0

Я использую OpenGL с шейдерами GLSL для обработки некоторых изображений. Я в основном использую framebuffers с орфографической проекцией для рендеринга моего изображения несколько раз (каждый с разными настройками для шейдера фрагмента).

Затем у меня есть 2 фреймбуфера с прикрепленными к ним текстурами, которые я визуализирую между ними (например, tex1 привязан к fb1, tex2 прикреплен к fb2. Первый проход отображает входную текстуру в fb1, второй проход передает tex1 в fb2, третий проход отображает tex2 в fb1... назад и вперед), пока последний проход не превратится из любой текстуры в выходной фреймбуфер.

Все это делается с использованием орфографических проекций, поэтому ни одно изображение не должно отсутствовать. Все это прекрасно работает, пока окно не изменится. Если я уменьшу высоту окна на половину изображения, оно будет только нарисовано в верхней половине окна, которое осталось (это за один проход, 2 прохода и оно будет только в верхней 1/4 окна). Может ли кто-нибудь понять, почему это происходит?

Второй снимок - после изменения размера окна до 3/4 его первоначальной высоты

http://i567.photobucket.com/albums/ss112/davidc538/rtip1.png

http://i567.photobucket.com/albums/ss112/davidc538/rtip2.png

Теги:
opengl
opengl-es
glsl

1 ответ

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

Похоже, вы не обновляете свои размеры текстуры при изменении размера. т.е. ваше окно изменилось, но вы все еще смешаетесь с его первоначальными размерами.

  • Pass 1 пишет tex1 (который прикреплен к fb1)
  • Pass 2 пишет tex1 (который прикреплен к fb1) к tex2 (fb2)
  • Pass 3 записывает tex2 обратно в tex1
  • Pass 3 записывает tex1 обратно в tex2

Это означало бы, что вы уменьшаете/увеличиваете свое изображение на каждом проходе.

Вы можете избежать этого, обновив fbo во время изменения размера (я бы посоветовал округлить до ближайшей более большой мощности два) или оставив fbo с фиксированным размером и всегда отображая полное окно (хотя ваш образ будет размытым при оказании большого окна).

  • 0
    Должны ли мои FBO работать полностью независимо от размера окна? Я хотел бы иметь возможность показывать необработанный ввод с веб-камеры на одной стороне окна и обработанный ввод на другой, но удвоение ширины окна увеличивает изображение при каждом проходе. Спасибо за ввод, хотя я действительно не могу понять, почему размер окна мешает моей способности обрабатывать изображение таким образом.
  • 1
    Разрешение FBO не имеет ничего общего с тем, как оно выглядит, когда вы рисуете его на экране. Вы можете переместить FBO в произвольный прямоугольник или наложить текстуру на треугольники, которые покрывают любую часть экрана, которую вы хотите. Вы несете ответственность за то, чтобы при изменении размера окна любой метод, который вы используете для отображения содержимого FBO, учитывал новые размеры окна. Но я подозреваю, что в вашем расплывчатом описании вы забыли, что glViewport (...) - это глобальное состояние, которое вы, вероятно, устанавливаете, когда изменяете размер окна, и не обращаете внимания на его переустановку при привязке FBO.
Показать ещё 1 комментарий

Ещё вопросы

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