GameDev.ru
/ GameDev.ru / Пользователи / Andrey / Сообщения на форуме пользователя Andrey (149 стр.)

Сообщения на форуме пользователя Andrey (149 стр.)

Quadtree или Octree13 фев. 200713:38#12
Asgard
>По поводу оптимальности - а не оптимальней свой список юзать, не stl-ный?
ты думаешь напишешь лучше? по поводу оптимальности при вызове std::list::push_back в вызывается new для нового узла...
если у std::vector сделать reserve, то new вызываться не будет. Все ограничится конструктором копий.
пример моих экспермиментов файл OgreOctreeSceneQuery.cpp, естественно в заголовочном файле поправка
(// Andrey
  // typedef std::list<Ogre::SceneNode *> NodeList_t;
  typedef std::vector<Ogre::SceneNode *> NodeList_t;):
/** Finds any entities that intersect the AAB for the query. */
void OctreeAxisAlignedBoxSceneQuery::execute(SceneQueryListener* listener)
{
    // Andrey
  //std::list < SceneNode * > list;
  static OctreeSceneManager::NodeList_t list;
  list.resize(0);
    //find the nodes that intersect the AAB
    static_cast<OctreeSceneManager*>( mParentSceneMgr ) -> findNodesIn( mAABB, list, 0 );

    //grab all moveables from the node that intersect...
  // Andrey
    //std::list < SceneNode * >::iterator it = list.begin();
  OctreeSceneManager::NodeList_t::iterator it = list.begin();
....
}
итак мы тут видим понижение быстродействия в 2 местах:
1) локальный контейнер std::list < SceneNode * > list; будет в кадре удалится постоянно, т.е. лучше будет статическая перменная
2) используется std::list и постоянно перевыделяется память без резервирования
луче всетаки избегать чаcтого выделения памяти в обновлении сцены.
таких мест в ogre движке я поправлял в десятке файлов. На сложной сцены будет небольшой прирост.
часто вызывается метод clear() но лучше вызвать resize(0) память останется зарезервированной, изменится только размер контейнера.
зацените демку13 фев. 200713:12#56
Sark7
Работает на Radeon 9600 но очень сильно тормозит :(
статья "Введение в физический движок AGEIA PhysX SDK"12 фев. 200719:08#10
Alexx
Спасибо большое!!! я уже думал что я туплю по страшному :)
Quadtree или Octree12 фев. 200719:07#10
GeorgeBig2
там местами не очень оптимально сделано.
для поиска объектов используется std::list хотя std::vector с вызовом reserve будет быстрей.
постоянные перелакации памяти при уничтожении локальных контейнеров.
Я как-то уже это заменял на static.
Quadtree или Octree12 фев. 200717:04#8
Asgard
я советую посмотреть как сделано в Ogre или Irricht там можно понять общую идею.

Quadtree или Octree12 фев. 200715:43#5
Asgard
>но что будет если объект находится на границе между двумя "кубами" октри, чьим его считать?
что ты предполагаешь под объектом? это игровой объект со своим AABB который в сцене с Octree? если так по опустить его на 1 уровень вверх, тогда он наверняка попадет полностью в родительский узел. В это случае в Octree будут содержатся как данные о геометрии, так и ссылки на другие объекты. В это случае если не виден узел(лист) то не рендерим(не идем в глубь по дочерним) как и геометрию так и не объекты внутри его.
Если это отдельный кусок геометрии то его отдельно бить на Octree и присоединять к общему дереву сцены - это уже плавный переход к понятию Scene Graph.
статья "Введение в физический движок AGEIA PhysX SDK"12 фев. 200715:37#8
Alexx
ща выкачал SDK поставил и после компиляции примера почему-то не могут включится  стандартные заголовочные файлы CRT
cmath, stdio.h  и т.д...
после удаления путей к SDK из настроек Visual C++ .Net 2003, все становится нормально. Никто не встречался с таким странным глюком? SDK v2.7.0. Ну не один пример не запускается. Access Violation.
Щелчки при проигрывании звука с использованием OpenAL.12 фев. 200714:14#17
Septic
>OpenAL в винде идет полностью через DirectSound. Так что переход ничего не даст, имхо.
сейчас уже на некоторых картах аппаратная  поддержка OpenAL, без Direct Sound. Ну на Creative само собой.
Quadtree или Octree12 фев. 200714:07#2
-=freeman=-
>ОкТри целесообразнее использовать для закрытых пространств
точнее для любых, если они не совсем равномерны по высоте т.е. большой замок  с разными высотами кусков геометрии.
ландшафты более равномерные в большинстве случаев по высоте. Хотя, если будут встречаться высокие горы то тут лучше ввести "3 измерение" и перейти к Octree.
зацените демку12 фев. 200714:03#44
Джо
>только Vertex Texture отсутствуют.
плохо я думал все есть только скорость поменее чем у X1600 и выше...
ну по твоим предположениям аналог  nVidia какой по конкурентноспособности GeForce 6800 или выше?
статья "Введение в физический движок AGEIA PhysX SDK"12 фев. 200712:27#5
Alexx
Спасибо! для начала втыкания самое то!
Отсечение невидимой геометрии12 фев. 200711:01#3
Osiris
Начни с самого простого...
рассчитай для всех объектов(для начала статических) AABB и в цикле отрисовки проверяй их на видимость по Frustum.
если сложно поситать AABB ручками используй:
HRESULT D3DXComputeBoundingBox(
  CONST D3DXVECTOR3 * pFirstPosition,
  DWORD NumVertices,
  DWORD dwStride,
  D3DXVECTOR3 * pMin,
  D3DXVECTOR3 * pMax
);
тогда рендер примет примерно такой вид:
 for( unsigned i = 0; i < std_vPlayerUnitsModels.size(); i++ )
{
...
if (td_vPlayerUnitsModels[i].AABB_in_frustum) {
std_vPlayerUnitsModels[i]->Render( CDX9E3Dapp::Get().pD3DDevice );
}
...
}
дальше оптимизацию можно усложнить и сделать Scene Graph, объединяя в иерархию AABB объекты и можно большими частями откидывать большой объем геометрии, постепенно спускаясь низ по дереву.
зацените демку12 фев. 200710:51#38
Джо
>А я себе вчера купил X1300 чтобы мои OpenGL демки работали на всём целевом железе...
ну и как не жалеешь? у меня тоде такая причина и купил Radeon тоже по поводу OpenGL  да и картинка в Far Cry с водой  была красивей да и другие игры выглядели красивей.
Sark7
GeForce 6600 все ок, но FPS не знаю сколько...
Radeon 9600 - красное окно :( и все... хотя драйвера не совсем новые 8.282.0.0 (02.08.2006 дата)
странный Access violation9 фев. 200717:04#14
IronBunny
можно еще попробовать проверить результат возращемый _heapchk()
Экспортный плагин для 3DSMAX на Delphi (coming soon)8 фев. 200716:39#3
Coriolis
чего ты так нервничаешь :)  я никого не хотел обижать и ничего не имел ввиду, а просто спросил :)

Следующие темы >>

2001—2012 © GameDev.ru — Разработка игр