ФОРУМ

Список разделов форума => Статьи => : Robot 27 Feb 2007 - 02:31:33



: Алгоритм Octree - теория и практика на DirectX
: Robot 27 Feb 2007 - 02:31:33
Алгоритм Octree - теория и практика на DirectX
Мерец Артем "Scart (http://forum.uraldev.ru/index.php?showuser=60)"
Рассматривается популярный метод сортировки - октарное дерево (Octree) для оптимизации
скорости работы вашего 3D приложения. Приведен пример практической реализации на DirectX
API, который легко можно подключить к вашему проекту.


http://www.uraldev.ru/articles/index.php?id=6 (http://www.uraldev.ru/articles/index.php?id=6)


: Алгоритм Octree - теория и практика на DirectX
: Scart 27 Feb 2007 - 16:37:23
Глянул свежим взглядом. Единственное что бросилось в глаза - рисование боксов, ограничивающих узлы, можно бы и упростить (вместо 19 вершин). Однако на производительности это не отразится, к тому же рисование ребер нужно только на этапе отладки.


: Алгоритм Octree - теория и практика на DirectX
: Albert 04 Mar 2007 - 23:20:33
Хорошая статья, актуальная и с подробным объяснением кода!


: Алгоритм Octree - теория и практика на DirectX
: wildboar 08 Mar 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


: Алгоритм Octree - теория и практика на DirectX
: Scart 08 Mar 2007 - 22:59:58
wildboar
[!--quoteo--][div class=\'quotetop\']Цитата[/div][div class=\'quotemain\'][!--quotec--]
Статья понравилась, РУЛЬ!
[/quote]
Спасибо =)

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


: Алгоритм Octree - теория и практика на DirectX
: Scart 08 Mar 2007 - 23:10:47
Насчет wndproc - писал каркас давно-давно, по какому-то туториалу, теперь он - единственный пример с игровым миром и камерой который у меня есть (делать сначала лень). К тому же я надеюсь, что этот пример не будут использовать как каркас для приложения, только класс самого дерева будут брать, а в нем я пока ничего нехорошего не нашел.