Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Disa от Январь 11, 2013, 17:24



Название: FBX + OpenGL
Отправлено: Disa от Январь 11, 2013, 17:24
Не совсем Qtшная тема, чисто по графике.

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

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

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

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

А и еще - я где-то тут мог спороть чушь, в потоке сознания :)


Название: Re: FBX + OpenGL
Отправлено: Igors от Январь 11, 2013, 18:15
Когда лучше всего вызывать glDrawElement или glDrawArray? После прочтения всех узлов или для каждого узла в отдельности? То же самое касается передачи параметров в шейдеры и вообще все что касается отрисовки.
Есть понятие "материал". Напр вот этот узел (нод, группа) имеет такие-то текстуры, реагирует на источники света так-то и.т.п. Соответственно она должна рисоваться отдельно, для нее должны устанавливаться uniform переменные (или, редко, активироваться свой шейдер). Другой нод может иметь уже другой материал. А свалив всю геометрию в кучу мы только и можем отрендеоить все однообразно. 

Должна быть возможность, например, выделать нужные участки модели - вот тут собственно сам сабж, для этого делать отдельный шейдер или просто передавать дополнительно цвет выделения?
Мне хватает базовых возможностей. Напр "выделить полигоны" - ну и рисую их цветом выделения. Или "выделить вертексы" - включаю вертексный цвет. И.т.п. В режиме выделения не требуется phong shading (и значит GLSL шейдер выключен) 


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

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


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

Не очень понял фразу, что значит шейдер отключен? А как же out fragColor?


Название: Re: FBX + OpenGL
Отправлено: Igors от Январь 11, 2013, 19:14
1) Заводится один шейдер для модели (вертексный и фрагментный)
2) Атрибуты и текстура передается в зависимости от параметров материал
3) Вершины передаются в зависимости от текущего узла (и соответственно вызывается и метод отрисовки).
Ну не только вершины (вертексы) - там хватает чего передавать (нормали, UV и др)

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

Не очень понял фразу, что значит шейдер отключен? А как же out fragColor?
Напр у Вас "достаточно богатая" текстура, и Вы еще и пытаетесь показать какие полигоны выделены. Результатом может быть "очень пестрый попугай". А если части модели не освещены то  выделения может и вообще не видно. Так не лучше ли в режиме выделения рисовать просто полигоны выделенным/невыделенным цветами (без текстур, источников света и.т.п.)? Или wireframe (можно поверх нормального рендера)


Название: Re: FBX + OpenGL
Отправлено: Disa от Январь 11, 2013, 19:33
Теперь вроде все понял, спасибо