Итак, я работаю над простым игровым движком с C ++ и OpenGL 4. Прямо сейчас я борюсь с рендерингом импортированных моделей.
Я использую FBX SDK для импорта моделей FBX, используяочень наивный подход: в основном я посещаю каждый узел fbx и добавляю данные меша в одну большую структуру, которая позже используется для рендеринга.Однако я хочу иметь возможность указать разные фрагментные шейдеры для каждого материала, используемого моделью (например, разные шейдеры для автомобильных дисков и фар).
В качестве справки, UE4 имеет систему материалов, которая позволяетпользователь может определить простой шейдер с помощью редактора, похожего на чертеж.
Я хотел бы применить аналогичную концепцию к моему движку, позволяющую создать материальный объект, который определяет фрагмент кода шейдера фрагмента и набориспользуемые текстуры.
Проблемы, с которыми я сталкиваюсь:
- Ясно, что я должен разделить вызовы отрисовки для каждой детали модели, которая использует другой материал, так как я не могуПоменять программу в середине вызова отрисовки (могу ли я?): на этом этапе, лучше ли иметь отдельный vao / vbo / ebo для каждой части или одной и отслеживать, где заканчивается часть и следующаяначинается?(Я думаю, это лучший вариант)
- Это хорошая практика, чтобы предварительно скомпилировать только фрагмент шейдера и присоединить его к текущей программе на лету (т.е. glAttach + glLinkProgram + glUseProgram) или это лучшепредварительно связать всю программу для каждого материала, учитывая, что вершинный шейдер всегда один и тот же?