#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 сначала отключите его как целевой буфер рендеринга, затем привяжите его к текстурирующим блокам, в которых вы хотите его использовать.