Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Что быстрее

0 views
Skip to first unread message

Georgy Saygin

unread,
Jul 20, 2004, 1:53:25 PM7/20/04
to
Hello all.

Пишу игру c използованием Direct3D 9. Дошёл до того места, где надо
выводить трехмерные обекты, их много и при загрузке карты меняется количество.

Возникли вопросы:
1) При выводе используется буффер вершин (если неошибаюсь)
IDIRECT3DVERTEXBUFFER9 в него запихиваются данные, потом в SetStreamSource и
вывод изображения. Для каждой модели буду отдельно создавать буффер вершин.
Когда нужно вывести объект: запихивать в SetStreamSource и выводить.

Это не медленно или стоит все в один буффер запихать?

2) Можно хранить вершины в IDIRECT3DVERTEXBUFFER9 и I**Mesh (не помню как
точно называется, в нём обычно хранят модели загруженные из *.x файла),
что быстрее?

Georgy

... Яйцо от курицы недалеко падает.

Sidorovich

unread,
Jul 21, 2004, 2:22:15 AM7/21/04
to
Tue Jul 20 2004 22:53, Georgy Saygin wrote to All:

GS> Hello all.

GS> Пишу игру c използованием Direct3D 9. Дошёл до того места, где надо
GS> выводить трехмерные обекты, их много и при загрузке карты меняется
GS> количество.

GS> Возникли вопросы:
GS> 1) При выводе используется буффер вершин (если неошибаюсь)
GS> IDIRECT3DVERTEXBUFFER9 в него запихиваются данные, потом в
GS> SetStreamSource и вывод изображения. Для каждой модели буду отдельно
GS> создавать буффер вершин. Когда нужно вывести объект: запихивать в
GS> SetStreamSource и выводить.
SetStreamSource - устанавливаешь вертексный буфер
SetIndices - индексный буфер (если используешь).
SetFVF - код вершины
DrawPrimitives (DrawIndexedPrimitives) - собственно рендеришь.
Возьми примеры из SDK - там все есть и все понятно.

GS> Это не медленно или стоит все в один буффер запихать?
Если верить факу по D3D9 от мелкософта, то смена вершинного буфера не
является "тяжелой" операцией. Hо, имхо, все зависит от кривизны драйверов.
Если геометрия моделей меняться не будет, то можешь запихать все в один
статический буфер.

GS> 2) Можно хранить вершины в IDIRECT3DVERTEXBUFFER9 и I**Mesh (не помню
GS> как точно называется, в нём обычно хранят модели загруженные из *.x
GS> файла),
GS> что быстрее?
Разницы не много. Просто при юзании ID3DXMesh ты можешь вызывать у него
метод DrawSubset, а в случае со своим буфером ты должен делать это сам.

Alex Niskorodnoff

unread,
Jul 27, 2004, 10:41:36 AM7/27/04
to
Дарова, *Georgy*! Весело живёте на планете /*Земля*/!

Однажды, *Georgy Saygin* нашептал(а) /_*All*_/ (в день 20 Июл 04 н.э)
следующее:

GS> Возникли вопросы:
GS> 1) При выводе используется буффер вершин (если неошибаюсь)
GS> IDIRECT3DVERTEXBUFFER9 в него запихиваются данные, потом в
GS> SetStreamSource и вывод изображения. Для каждой модели буду отдельно
GS> создавать буффер вершин. Когда нужно вывести объект: запихивать в
GS> SetStreamSource и выводить.
GS> Это не медленно или стоит все в один буффер запихать?
Именно будет медленно(хотя все зависит еще и от видео и от ее дров).
Лучше делать один(точнее несколько но больших, так как очень большие бферы и
весят очень много ;-) на текстуры не останется) статических VB(или если меш
сложный то и IndexBuffer) и пихать все туда используя какую-либо адресацию для
наборов фейсов мешей. Чем меньше переключений VB тем лучше.


GS> 2) Можно хранить вершины в IDIRECT3DVERTEXBUFFER9 и I**Mesh (не
GS> помню


GS> как точно называется, в нём обычно хранят модели загруженные из *.x
GS> файла),
GS> что быстрее?

Если для каждого объекта будет свой набор VB/IB, то получится тот же тормоз, бо
ID3DXMesh содержит все в себе и фактически автономен.


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


Я даже как-то не так давно статейку написал про мое мировозрение на организацию
этого дела. Ищи ее на сайте(см в подписи) в разделе Статьи - мож поможет.

Покедова. Пиши /_Nailman`у_/. *WWW.CyborgHome.Ru/NailMan* /_ICQ:263635856/_
*WinAmp*: /_*Infected Mushroom - Never Never Land (Psychedelic)*/_
... [Psy][GOA][Ambient][AMD][8RDA3G][DiaLAND.RU][Universe][Delphi][Выспаться]

0 new messages