Несколько мешей в одном буфере вершин?

Нужно ли использовать один буфер вершин на сетку или я могу хранить несколько сеток в одном буфере вершин? Если так, я должен сделать это, и как я сделал бы это?

13.10.2009 12:08:40
4 ОТВЕТА
РЕШЕНИЕ

Вы можете хранить несколько сеток в одном буфере вершин. Вы можете повысить производительность, поместив несколько маленьких мешей в один буфер. Для действительно больших сеток вы должны использовать отдельные буферы. SetStreamSourceпозволяет вам указать смещение буфера вершин для вашей текущей сетки.

pRawDevice->SetStreamSource( 0, m_VertexBuffer->GetBuffer(), m_VertexBuffer->GetOffset(), m_VertexBuffer->GetStride() );
5
13.10.2009 12:32:47

С OpenGL вы можете использовать glVertexPointer()рисование с определенного смещения внутри VBO. не уверен насчет D3D.

-2
13.10.2009 12:18:37

Обычно в TBH причина их размещения в одном большом буфере - экономия на вызовах отрисовки. Стоимость переключения буфера вершин довольно минимальна. Если вы можете объединить их все в 1 буфер вершин и визуализировать 10 объектов за один вызов ничьей, то вы получите большой выигрыш.

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

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

Если все объекты разные и движущиеся / анимированные, я бы просто придерживался отдельных VB. Я сомневаюсь, что вы заметите разницу, объединив их вместе.

2
13.10.2009 14:24:49

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

0
16.10.2009 07:35:59