Russian Qt Forum
Ноябрь 23, 2024, 16:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: FBX + OpenGL  (Прочитано 4232 раз)
Disa
Гость
« : Январь 11, 2013, 17:24 »

Не совсем Qtшная тема, чисто по графике.

Задача:
Загрузка модели в удобном виде из нескольких популярных форматов. Ну поэтому и FBX SDK.

Проблема - в SDK есть кучу примеров, хорошо документированных, но они под FFP Грустный Хотя слава богу не везде glBegin/glEnd и даже есть своя обертка для VBO, хочется (но в силу слабости ума не можется) это все переделать на шейдеры + VAO, чтобы убрать лишний код для VBO + ускорить отрисовку.

Если с проблемой замены вызовов glBegin/glEnd на просто засовывание этого всего в вектора проблем особо нет, то вот есть проблемы с местом инициализации шейдеров и их параметров (я все еще плаваю в этих шейдерах).

Когда лучше всего вызывать glDrawElement или glDrawArray? После прочтения всех узлов или для каждого узла в отдельности? То же самое касается передачи параметров в шейдеры и вообще все что касается отрисовки. Должна быть возможность, например, выделать нужные участки модели - вот тут собственно сам сабж, для этого делать отдельный шейдер или просто передавать дополнительно цвет выделения?

А и еще - я где-то тут мог спороть чушь, в потоке сознания Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Январь 11, 2013, 18:15 »

Когда лучше всего вызывать glDrawElement или glDrawArray? После прочтения всех узлов или для каждого узла в отдельности? То же самое касается передачи параметров в шейдеры и вообще все что касается отрисовки.
Есть понятие "материал". Напр вот этот узел (нод, группа) имеет такие-то текстуры, реагирует на источники света так-то и.т.п. Соответственно она должна рисоваться отдельно, для нее должны устанавливаться uniform переменные (или, редко, активироваться свой шейдер). Другой нод может иметь уже другой материал. А свалив всю геометрию в кучу мы только и можем отрендеоить все однообразно. 

Должна быть возможность, например, выделать нужные участки модели - вот тут собственно сам сабж, для этого делать отдельный шейдер или просто передавать дополнительно цвет выделения?
Мне хватает базовых возможностей. Напр "выделить полигоны" - ну и рисую их цветом выделения. Или "выделить вертексы" - включаю вертексный цвет. И.т.п. В режиме выделения не требуется phong shading (и значит GLSL шейдер выключен) 
Записан
Disa
Гость
« Ответ #2 : Январь 11, 2013, 18:52 »

Цитировать
Есть понятие "материал". Напр вот этот узел (нод, группа) имеет такие-то текстуры, реагирует на источники света так-то и.т.п. Соответственно она должна рисоваться отдельно, для нее должны устанавливаться uniform переменные (или, редко, активироваться свой шейдер). Другой нод может иметь уже другой материал. А свалив всю геометрию в кучу мы только и можем отрендеоить все однообразно. 
Ну я примерно так и думал. Если я ничего не путаю, то лучше (если не требуется других видов затенения или еще чего-то), то:
1) Заводится один шейдер для модели (вертексный и фрагментный)
2) Атрибуты и текстура передается в зависимости от параметров материал
3) Вершины передаются в зависимости от текущего узла (и соответственно вызывается и метод отрисовки).

Тогда встает еще один вопрос - если есть, например, альфа блендинг (или что-то где важен порядок отрисовки), то узлы нужно всегда сортировать перед отрисовкой?


Цитировать
В режиме выделения не требуется phong shading (и значит GLSL шейдер выключен)

Не очень понял фразу, что значит шейдер отключен? А как же out fragColor?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Январь 11, 2013, 19:14 »

1) Заводится один шейдер для модели (вертексный и фрагментный)
2) Атрибуты и текстура передается в зависимости от параметров материал
3) Вершины передаются в зависимости от текущего узла (и соответственно вызывается и метод отрисовки).
Ну не только вершины (вертексы) - там хватает чего передавать (нормали, UV и др)

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

Не очень понял фразу, что значит шейдер отключен? А как же out fragColor?
Напр у Вас "достаточно богатая" текстура, и Вы еще и пытаетесь показать какие полигоны выделены. Результатом может быть "очень пестрый попугай". А если части модели не освещены то  выделения может и вообще не видно. Так не лучше ли в режиме выделения рисовать просто полигоны выделенным/невыделенным цветами (без текстур, источников света и.т.п.)? Или wireframe (можно поверх нормального рендера)
Записан
Disa
Гость
« Ответ #4 : Январь 11, 2013, 19:33 »

Теперь вроде все понял, спасибо
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.06 секунд. Запросов: 23.