OpenGL: текстурирование при рисовании FBO

#macos #opengl #textures #fbo

#macos #opengl #Текстуры #fbo

Вопрос:

Кто-нибудь знает, возможно ли визуализировать текстурированный объект при рисовании текстуры FBO? Например, я хочу сгенерировать FBO / текстуру, которая показывает рендеринг текстурированного чайника. Это может быть использовано для отображения зеркального отражения упомянутого чайника.

Я пробовал уже несколько раз, и это всегда возвращает невидимый объект. FBO / texture отображает линии и другие нетекстурированные заштрихованные объекты, но не текстурированные. Странно…

— Рисование той же сцены непосредственно в главном фреймбуфере работает нормально. Текстурированные и нетекстурированные объекты отображаются отлично.

— Идентификатор текстуры, для которого я выполняю рендеринг, не используется при создании FBO / текстуры. Итак, нет круговой привязки.

— glGetError не возвращает никакой ошибки после glDrawElements, так что это не источник проблемы.

— Координаты текстуры указаны правильно.

— Моя графическая карта (Intel x3100) действительно поддерживает OpenGL 2.0 в Mac OS-X 10.6.7, и примеры программ FBO работают нормально (однако они не поддерживают текстурирование).

Вероятно, это что-то действительно простое, но я просто не могу его найти…


Если это невозможно, то какой рекомендуемый способ сделать это? С помощью шейдеров? Потребуется ли для этого какая-либо форма мультитекстурирования?

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

1. Хорошо, все работает нормально. Я просто забыл удалить вызов glActiveTextureARB () прямо перед рисованием FBO, по сути перенаправляя весь рисунок куда-то еще. Это всегда мелочи…

Ответ №1:

FBO отличаются от других целей рендеринга, поэтому текстурирование работает просто отлично. Единственная причина в том, что части текстурных блоков все еще могут быть забиты вложениями FBO. FBO не может быть целью рендеринга и источником текстурирования одновременно, поэтому, если OpenGL считает, что это может иметь место, могут произойти странные вещи.

Убедитесь, что для рендеринга FBO используется в качестве текстуры. Сначала вам нужно отвязать FBO и его вложения от всех текстурных блоков, в которых он используется, затем привязать FBO как буфер отрисовки.

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