Преобразование персональных переменных .obj для OpenGL

Насколько я знаю, OpenGL не поддерживает персональные атрибуты. Я решил использовать файлы материалов из файлов .obj и уже успешно загрузил их в свой проект. Тем не менее, я подумал, что материалы использовались для каждой группы объектов, и я понял, что формат .obj может на самом деле использовать индивидуальные материалы. Следовательно, группа вершин (или, скажем, сетка) может иметь более одного материала для определенных граней.

Я был бы в состоянии преобразовать маленькие переменные, такие как зеркальные и т. Д. В каждую вершину, но весь материал может варьироваться от лица к лицу; карты освещения, окружения, зеркальности, текстуры (рассеянная норма и т. д.). Было бы легко, если бы материалы были для каждой сетки, чтобы я мог загружать их как подсетки и прикреплять к ним соответствующие материалы.

Как я собираюсь обращаться с несколькими материалами для ОДНОЙ сетки, в которой материалы неравномерно распределены между гранями в ней?

1

Решение

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

Как работает мой рендерер:

iterate through meshes
bind mesh's vertex array object
bind mesh's uniform buffer object
iterate through mesh's materials
use shaders, bind textures, set uniforms...
draw material's index buffer with glDrawElements

Конечно, вы не захотите менять шейдеры для каждого материала, поэтому, если вам нужно использовать несколько шейдеров, а не просто менять форму, вам нужно будет объединить их вместе.

Это не специфично для obj / mtl, но для любого формата сетки / материала.

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector