Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];

Вниз

Что лучше ID3DXMesh или использование IndexBuffer и VertexBuffer?   Найти похожие ветки 

 
MrAngel   (2004-05-28 17:30) [0]

САБЖ.

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

Всё относится к Direct3D.


 
NailMan ©   (2004-05-28 17:40) [1]

Смотря как для тебя критична произодительность приложение: Если много одинаковых объектов и важно их рендерить максимально быстро, то однозначно VB/IB(в исполнении статического буфера).

Если тестовое приложение, то можно и ID3DXMesh.

А стейт надо такой

SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
или
SetRenderState(D3DRS_CULLMODE,D3DCULL_CW);

---
WBR, NailMan aka 2:5020/3337.13


 
MrAngel   (2004-05-28 18:16) [2]

Даже и не знаю. Уж очень удобен этот  ID3DXMesh. Особенно восможность разделения мэша на участки, т.к. у меня на разных участках разные текстуры. Прорисовка по тем же самым участкам тоже нужна.

С другой стороны надо выжать максимум производительности.

Кстати всёравно SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
и SetRenderState(D3DRS_CULLMODE,D3DCULL_CW); как то не так работают. Наверное я не верно нормали задал.


 
NailMan ©   (2004-05-28 19:43) [3]


> Даже и не знаю. Уж очень удобен этот  ID3DXMesh. Особенно
> восможность разделения мэша на участки, т.к. у меня на разных
> участках разные текстуры. Прорисовка по тем же самым участкам
> тоже нужна.

Ну если ты почитаешь мою статейку на моем сайте (http://www.cyborghome.ru/nailman) посвещенную как раз этому делу, то поймешь что все это просто реализовать и с помощью VB/IB/AT.


> С другой стороны надо выжать максимум производительности.
>

Как раз с помощью статических буферов(VB/IB/AT) можно этого достичь.


> Кстати всёравно SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
> и SetRenderState(D3DRS_CULLMODE,D3DCULL_CW); как то не так
> работают. Наверное я не верно нормали задал.

Вопрос в том как ты подготавливаешь модели, чем конвертишь в .X?

---
WBR, NailMan aka 2:5020/3337.13


 
MrAngel   (2004-05-28 21:41) [4]


> Ну если ты почитаешь мою статейку на моем сайте (http://www.cyborghome.ru/nailman)
> посвещенную как раз этому делу, то поймешь что все это просто
> реализовать и с помощью VB/IB/AT.

Эту статью уже читал. Я так понял идея "статических буфферов" используется лишь ради уменьшения переключений типа SetStreamSource и SetIndices. На сколько это эффективно ты не замерял ?


> Вопрос в том как ты подготавливаешь модели, чем конвертишь
> в .X?

Чтение из OBJ в времемные буффера для преобрахования полигонов в треугольники, затем занесение их в ID3DXMesh. В общем всё руками.


 
NailMan ©   (2004-05-29 00:41) [5]


> Эту статью уже читал. Я так понял идея "статических буфферов"
> используется лишь ради уменьшения переключений типа SetStreamSource
> и SetIndices. На сколько это эффективно ты не замерял ?

На очень много, примерно вдвое и выше на большом числе объектов(>100 с 5-6 материалами на объект).


> Чтение из OBJ в времемные буффера для преобрахования полигонов
> в треугольники, затем занесение их в ID3DXMesh. В общем
> всё руками.

Проще уж конвертить из 3ds или lw в *.X посредством DeepExploration и грузить встроенными функциями D3DX8, которые все сами сделают.


 
MrAngel   (2004-05-30 15:38) [6]

Сделал небольшие расчёты по количеству переключений.

Следующий код
begin
 FDirect3DDevice.Clear(0, nil, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0, 0);

 FDirect3DDevice.BeginScene;

 for i := 1 to 100000 do
 begin
   FDirect3DDevice.SetStreamSource(0, FDirect3DVERTEXBUFFER, 0, SizeOf(TCUSTOMVERTEX));
   FDirect3DDevice.SetIndices(FDirect3DINDEXBUFFER);

   FDirect3DDevice.SetStreamSource(0, FDirect3DVERTEXBUFFER2, 0, SizeOf(TCUSTOMVERTEX));
   FDirect3DDevice.SetIndices(FDirect3DINDEXBUFFER2);
 end;

 FDirect3DDevice.EndScene;

 INC(FFramesPerSecond);
end;


Сразу видно, что за один кадр мы делаем ровно 100000 переключений. При этом было 70 FPS.
При одном единственном включении на один кадр было 7884 FPS.

Разница есть, но помоему задержка из-за операнда CALL центрального процессора.

А что вообще по этому поводу говорит Микрософт ???


 
MrAngel   (2004-05-30 17:56) [7]

Кстати на счёт нормалей. Дело то оказывается не в них. Я фигуру немного не правильно загрузил. Получилось своего рода зеркальное отражение от оригинала (работа с вертексами). Сам пока не пойму почему так - разбираюсь.


 
NailMan ©   (2004-05-31 11:50) [8]

MrAngel

> Разница есть, но помоему задержка из-за операнда CALL центрального
> процессора.
> А что вообще по этому поводу говорит Микрософт ???

Именно он рекомендует юзать СБ на VB/IB/AT где только возможно и в более сложных случаях юзать уже более продвинутые весчи типа ID3DXMesh или ID3DXSkinMesh.

А вообще все зависит от тебя - что удобней для реализации идеи, то и используешь.

У меня вот для хранения всей геометрии(за некоторым исключением) юзаются статические буферы(VB/IB/AT) с общим для всех FVF.

Для хранения кубонебулы(в простонародии и у мелкомягкого называется SkyBox) я юзаю ID3DXMesh, т.к. из-за каких-то глюков с рендером не получается его в СБ запихнуть.

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


> Кстати на счёт нормалей. Дело то оказывается не в них. Я
> фигуру немного не правильно загрузил. Получилось своего
> рода зеркальное отражение от оригинала (работа с вертексами).
> Сам пока не пойму почему так - разбираюсь.

Вот я и говорю - юзать ID3DXMesh из *.X - файлов(через DeepExploration) и не мучайся глюками. Не обижай Билли - он же старался для тебя :-)


 
MrAngel   (2004-05-31 18:42) [9]


> Именно он рекомендует юзать СБ на VB/IB/AT где только возможно
> и в более сложных случаях юзать уже более продвинутые весчи
> типа ID3DXMesh или ID3DXSkinMesh.
>
> А вообще все зависит от тебя - что удобней для реализации
> идеи, то и используешь.


Преследую идею полностью разрушаемого мира. Следовательно любой меш долшен являться динамическим, а также должна быть возможность динамического удаления/добавления вертексов и индексов.
Если так подумать в моём случае абсолютно нет никакой статики. Следовательно использование идеи СБ бесмысленно. Однако  ID3DXMesh не очень хорош в плане производительности, следовательно есть только один вариант - IndexBuffer и VertexBuffer.


> Вот я и говорю - юзать ID3DXMesh из *.X - файлов(через DeepExploration)
> и не мучайся глюками. Не обижай Билли - он же старался для
> тебя :-)


Я нашёл причину глюков. Оказывается надо было включить EnableAutoDepthStencil и настроить AutoDepthStencilFormat при создании устройства :-)



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.032 c
1-1094924371
Antonmm
2004-09-11 21:39
2004.09.26
Количество файлов в папке


1-1093345645
MetalFan
2004-08-24 15:07
2004.09.26
как запретить копирование...


1-1094633983
Koala
2004-09-08 12:59
2004.09.26
Удаление файла


1-1094734605
Ivolg
2004-09-09 16:56
2004.09.26
ListView


14-1094236585
Владислав
2004-09-03 22:36
2004.09.26
Вопрос.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский