Архитектура движка.Форум

Render Agents и шейдеры

#0
11:02, 6 окт 2007

Доброе время суток всем!
Если вопрос сильно нубский, просьба не пинать по лицу и почкам ;)

Возник концептуальный затык.

Смысл такой: есть три сущности - меш, шейдер и рендер агент.
Рендер агент умеет рисовать меш - выставляет материал (в данном случае шейдер, т.е. говорит ему Apply), загоняет все, что нужно в VBO и т.д.,  меш хранит необходимую для шейдера инфу - например TBN, шейдер всю эту инфу съедает и рисует.

Но.

Как с т.з. архитектуры правильнее сделать передачу в шейдер per-vertex параметров?
В идеале меш о своем материале ничего знать не должен имхо.
Материалов вообще много разных - для ffp один, для обычного Фонга другой, для бампа третий...
Рендер агент к материалу привязывать тоже неохота.

Извините, что так путано, всем спасибо за внимание...

#1
11:44, 8 окт 2007

Вертекс формат для меша известен после выбора материала в редакторе. Здесь его лучше и сохранить, потому как менять его в рантайме ни к чему. Тут же лучше из толстого меша, экспортнутого из 3d пакета (у которого вершинный формат избыточный на все случаи жизни) сделать тонкий под текущий вертекс формат.

#2
14:54, 8 окт 2007

MiF
Возможно, я туплю, но мы, похоже, говорим на разных языках...

Пример.
Есть класс материала "GLSL-ный бамп". Он хочет TBN, и, соотвественно, делает у себя в конструкторе glGetAttribLocation.
Есть меш. У него унутре лежит TBN.
Есть агент. Он берет меш, и делает glVertexPointer/gNormalPointer/etc -> glDrawElements.

Теперь вопрос. Откуда рендер агент узнает, что ему надо сделать еще и glVertexAttribPointer? А ведь еще в шейдер нужно uniform'ы запихать...

Сделать что-то типа класса-контекста материала? И пусть материал говорит "хочу вот эту штуку, которая у объекта лежит вот здесь, и положи мне ее вот сюда"?

#3
12:44, 10 окт 2007

А, ты про GL.
Сделай например вещь, инкапсулирующую формат вершины. Наподобие vertex declaration в d3d9.
Храни ее в меше. Рендер агент возьмет ее оттуда и сделает нужные glXXXPointer.

#4
12:50, 10 окт 2007

Хорошая идея. Странно, что я до нее не додумался. Теперь надо придумать интерфейс формата вершин и две его реализации - под dx и gl.
Но общее направление я понял.
Пойду начну писать...

Спасибо!

Архитектура движка.Форум

Тема в архиве.