VBO на атрибут шейдера без VAO или другой подход? - PullRequest
0 голосов
/ 10 декабря 2011

Я использую различные «вложенные» контексты в своем приложении (для совместного использования шейдеров и геометрии), поэтому я не могу использовать VAO, так как они не могут быть разделены между контекстами.

Мои данные сетки хранятся в одном VBOв качестве «пула» уникальных вершин и в другом VBO я храню индексы, составляющие грани.В настоящее время я успешно использую это для каркасного рендеринга в своем CAD-приложении, но я хотел бы добавить режим плоского затенения - и для этого мне нужны грани нормали.

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

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

1 Ответ

4 голосов
/ 11 декабря 2011

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

Ваша проблема не имеет ничего общего с VAO или буферными объектами. VAO не позволяют иметь несколько списков индексов. Они не позволяют вам иметь «нормальные лица».

A объекты массива вершин - это не более чем контейнер, в котором хранятся привязки атрибутов вершин. Они не позволяют вам делать то, что вы не могли бы сделать без них; есть просто удобный способ изменить все привязки атрибутов.

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

К вашему сведению: причина, по которой VAO не являются общими, заключается в том, что они слишком просты, чтобы делиться ими. Вы можете достаточно легко настроить один и тот же VAO в двух разных контекстах. Просто создайте VAO в том контексте, в котором вы хотите его использовать, и сделайте то, что вы обычно делаете для его настройки. Это просто простой объект состояния; на самом деле он ничего не содержит.

...