22 Сен 2019 - 06:20:57
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
   Начало   Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: Алгоритм Octree - теория и практика на DirectX
Robot

Сообщений: 653


Робот УралДев
Просмотр профиля
« : 27 Фев 2007 - 02:31:33 »

Алгоритм Octree - теория и практика на DirectX
Мерец Артем "Scart"
Рассматривается популярный метод сортировки - октарное дерево (Octree) для оптимизации
скорости работы вашего 3D приложения. Приведен пример практической реализации на DirectX
API, который легко можно подключить к вашему проекту.


http://www.uraldev.ru/articles/index.php?id=6
« Последнее редактирование: 24 Дек 2007 - 23:10:38 от Albert MW » Записан
Scart

Сообщений: 226


< Артем
Просмотр профиля WWW
« Ответ #1 : 27 Фев 2007 - 16:37:23 »

Глянул свежим взглядом. Единственное что бросилось в глаза - рисование боксов, ограничивающих узлы, можно бы и упростить (вместо 19 вершин). Однако на производительности это не отразится, к тому же рисование ребер нужно только на этапе отладки.
Записан

Все приходит с опытом...
Albert
Юзеры

Сообщений: 1044


< Альберт -
Просмотр профиля WWW E-mail
« Ответ #2 : 04 Мар 2007 - 23:20:33 »

Хорошая статья, актуальная и с подробным объяснением кода!
Записан
wildboar
Юзеры

Сообщений: 37


< Борис
Просмотр профиля WWW E-mail
« Ответ #3 : 08 Мар 2007 - 08:29:00 »

Статью ждал с появления сообщения "Скоро на УралДев...". И ждал не зря, делюсь своим мнением по поводу данной статьи.
Статья понравилась, РУЛЬ! Scart'у Respect Forever!!!
Побуждает отправится на поиски материала по теме для сравнения и продолжить пытаться что-нибудь создать.
Деление на 2 страницы мне НЕ УДОБНО для чтения, скачивания и хранения на винте!!! Как обычно, склеил в 1 FrontPage'ем.
   (версии для печати нет)

Пример понравился. Собрал, поковырялся немного. Проверил Эффективность с выкл./вкл. сортировкой:
  "Мы подгружаем еще десяток объектов - куда лучше, но пока что-то не то.
Теперь мы грузим целый виртуальный мир – выглядет отлично..."
   
#define ScreenWidth  1024
#define ScreenHeight 768
#define NUMOBJ 1000
#define BOXSIZE 1000
#define OBJINLIST 100
   > полет нормальный <

Не хватает:
1) ini-файл
2) Изменение параметров в самой демке
3) log-файл
4) переключения оконный/полноэкранный режим. (В полноэкранном режиме FPS ВСЕГДА значительно выше)
5) переключение режимов камеры (камера пешехода/ камера полета).

Загрузка ЦП 98-100%. 7 метров в памяти, утечек нет (только 4Kb и 10Kb - dll'ки Microsoft)
При запуске Демки Фокус камеры ИНОГДА теряется(1-3 секунды на поиски сцены мышью)

   И напоследок ВРЕДНЫЙ советик, но
тест в MemProof: Unfreed Resource
  Item:   CreateWindowEx(0,"MainWindow","Octree in Directx by Scart (Merets Artem)
CreateWindowEx creares an overlapped, pop-up, or child window with an extended style.
The returned window handle must be freed with DestrowWindow or by passing a
WM_DESTROY message to the default window procedure.

   Считаю, что лучше будет так:
1.
// Удалить Лишние 3 строки из WindowProc (все-равно в текущем виде, нажимая <Escape>, в коде нет вызова WM_DESTROY)      
        case WM_DESTROY:
      {
               PostQuitMessage(0);
      }
2.
// Добавить в Cleanup{}   
 if (hwnd && !DestroyWindow(hwnd))       // нажимая <Escape>, Уничтожаем Окно в ручную, вызывая WM_DESTROY
  {
   MessageBox(NULL,"Не получилось освободить hwnd","ошибка при освобождении ресурсов",MB_OK | MB_ICONINFORMATION);
   hwnd=NULL;                  // Обнуляем hwnd
  }
3.   
// ИМХО - это неизбежно для переключения режимов экрана - все относящееся к очистке собрать в одной функции
// UnregisterClass( "MY_WINDOWS_CLASS", winClass.hInstance ); Из WinMain в конец Cleanup{},
// переименовав параметр winClass.hInstance в  hInstance  // ВОЗМОЖНО, что в ЭТОМ я заблуждаюсь!!!
     UnregisterClass( "MY_WINDOWS_CLASS", hInstance );
4.
// потребуется объявить идентификатор hInstance
// в main.cpp после подключения библиотек Добавить:
     HINSTANCE   hInstance;   // Holds The Instance Of The Application
« Последнее редактирование: 08 Мар 2007 - 08:30:56 от wildboar » Записан
Scart

Сообщений: 226


< Артем
Просмотр профиля WWW
« Ответ #4 : 08 Мар 2007 - 22:59:58 »

wildboar
[!--quoteo--][div class=\'quotetop\']очень сложна для понимания "с нуля", поэтому попытался максимально облегчить код, сохранив при этом его полноценность, не обрезаю функциональность дерева. Возможно, в последствии напишу еще одну-две статейки и демки по octree (по прикручиванию его к ландшафту с созданием IB в листах и прочее). Она будет для продвинутах, так сказать, новые фичи в octree и кое-что еще
Записан

Все приходит с опытом...
Scart

Сообщений: 226


< Артем
Просмотр профиля WWW
« Ответ #5 : 08 Мар 2007 - 23:10:47 »

Насчет wndproc - писал каркас давно-давно, по какому-то туториалу, теперь он - единственный пример с игровым миром и камерой который у меня есть (делать сначала лень). К тому же я надеюсь, что этот пример не будут использовать как каркас для приложения, только класс самого дерева будут брать, а в нем я пока ничего нехорошего не нашел.
Записан

Все приходит с опытом...
Страниц: [1]
  Печать  
 
Перейти в: