Сообщения на форуме пользователя Andrey (149 стр.)
Quadtree или Octree | 13 фев. 2007 | 13: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;):
итак мы тут видим понижение быстродействия в 2 местах:
1) локальный контейнер std::list < SceneNode * > list; будет в кадре удалится постоянно, т.е. лучше будет статическая перменная
2) используется std::list и постоянно перевыделяется память без резервирования
луче всетаки избегать чаcтого выделения памяти в обновлении сцены.
таких мест в ogre движке я поправлял в десятке файлов. На сложной сцены будет небольшой прирост.
часто вызывается метод clear() но лучше вызвать resize(0) память останется зарезервированной, изменится только размер контейнера.
>По поводу оптимальности - а не оптимальней свой список юзать, не 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(); .... } |
1) локальный контейнер std::list < SceneNode * > list; будет в кадре удалится постоянно, т.е. лучше будет статическая перменная
2) используется std::list и постоянно перевыделяется память без резервирования
луче всетаки избегать чаcтого выделения памяти в обновлении сцены.
таких мест в ogre движке я поправлял в десятке файлов. На сложной сцены будет небольшой прирост.
часто вызывается метод clear() но лучше вызвать resize(0) память останется зарезервированной, изменится только размер контейнера.
зацените демку | 13 фев. 2007 | 13:12 | #56 |
---|
Sark7
Работает на Radeon 9600 но очень сильно тормозит :(
Работает на Radeon 9600 но очень сильно тормозит :(
статья "Введение в физический движок AGEIA PhysX SDK" | 12 фев. 2007 | 19:08 | #10 |
---|
Alexx
Спасибо большое!!! я уже думал что я туплю по страшному :)
Спасибо большое!!! я уже думал что я туплю по страшному :)
Quadtree или Octree | 12 фев. 2007 | 19:07 | #10 |
---|
GeorgeBig2
там местами не очень оптимально сделано.
для поиска объектов используется std::list хотя std::vector с вызовом reserve будет быстрей.
постоянные перелакации памяти при уничтожении локальных контейнеров.
Я как-то уже это заменял на static.
там местами не очень оптимально сделано.
для поиска объектов используется std::list хотя std::vector с вызовом reserve будет быстрей.
постоянные перелакации памяти при уничтожении локальных контейнеров.
Я как-то уже это заменял на static.
Quadtree или Octree | 12 фев. 2007 | 17:04 | #8 |
---|
Asgard
я советую посмотреть как сделано в Ogre или Irricht там можно понять общую идею.
я советую посмотреть как сделано в Ogre или Irricht там можно понять общую идею.
Quadtree или Octree | 12 фев. 2007 | 15:43 | #5 |
---|
Asgard
>но что будет если объект находится на границе между двумя "кубами" октри, чьим его считать?
что ты предполагаешь под объектом? это игровой объект со своим AABB который в сцене с Octree? если так по опустить его на 1 уровень вверх, тогда он наверняка попадет полностью в родительский узел. В это случае в Octree будут содержатся как данные о геометрии, так и ссылки на другие объекты. В это случае если не виден узел(лист) то не рендерим(не идем в глубь по дочерним) как и геометрию так и не объекты внутри его.
Если это отдельный кусок геометрии то его отдельно бить на Octree и присоединять к общему дереву сцены - это уже плавный переход к понятию Scene Graph.
>но что будет если объект находится на границе между двумя "кубами" октри, чьим его считать?
что ты предполагаешь под объектом? это игровой объект со своим AABB который в сцене с Octree? если так по опустить его на 1 уровень вверх, тогда он наверняка попадет полностью в родительский узел. В это случае в Octree будут содержатся как данные о геометрии, так и ссылки на другие объекты. В это случае если не виден узел(лист) то не рендерим(не идем в глубь по дочерним) как и геометрию так и не объекты внутри его.
Если это отдельный кусок геометрии то его отдельно бить на Octree и присоединять к общему дереву сцены - это уже плавный переход к понятию Scene Graph.
статья "Введение в физический движок AGEIA PhysX SDK" | 12 фев. 2007 | 15:37 | #8 |
---|
Alexx
ща выкачал SDK поставил и после компиляции примера почему-то не могут включится стандартные заголовочные файлы CRT
cmath, stdio.h и т.д...
после удаления путей к SDK из настроек Visual C++ .Net 2003, все становится нормально. Никто не встречался с таким странным глюком? SDK v2.7.0. Ну не один пример не запускается. Access Violation.
ща выкачал SDK поставил и после компиляции примера почему-то не могут включится стандартные заголовочные файлы CRT
cmath, stdio.h и т.д...
после удаления путей к SDK из настроек Visual C++ .Net 2003, все становится нормально. Никто не встречался с таким странным глюком? SDK v2.7.0. Ну не один пример не запускается. Access Violation.
Щелчки при проигрывании звука с использованием OpenAL. | 12 фев. 2007 | 14:14 | #17 |
---|
Septic
>OpenAL в винде идет полностью через DirectSound. Так что переход ничего не даст, имхо.
сейчас уже на некоторых картах аппаратная поддержка OpenAL, без Direct Sound. Ну на Creative само собой.
>OpenAL в винде идет полностью через DirectSound. Так что переход ничего не даст, имхо.
сейчас уже на некоторых картах аппаратная поддержка OpenAL, без Direct Sound. Ну на Creative само собой.
Quadtree или Octree | 12 фев. 2007 | 14:07 | #2 |
---|
-=freeman=-
>ОкТри целесообразнее использовать для закрытых пространств
точнее для любых, если они не совсем равномерны по высоте т.е. большой замок с разными высотами кусков геометрии.
ландшафты более равномерные в большинстве случаев по высоте. Хотя, если будут встречаться высокие горы то тут лучше ввести "3 измерение" и перейти к Octree.
>ОкТри целесообразнее использовать для закрытых пространств
точнее для любых, если они не совсем равномерны по высоте т.е. большой замок с разными высотами кусков геометрии.
ландшафты более равномерные в большинстве случаев по высоте. Хотя, если будут встречаться высокие горы то тут лучше ввести "3 измерение" и перейти к Octree.
зацените демку | 12 фев. 2007 | 14:03 | #44 |
---|
Джо
>только Vertex Texture отсутствуют.
плохо я думал все есть только скорость поменее чем у X1600 и выше...
ну по твоим предположениям аналог nVidia какой по конкурентноспособности GeForce 6800 или выше?
>только Vertex Texture отсутствуют.
плохо я думал все есть только скорость поменее чем у X1600 и выше...
ну по твоим предположениям аналог nVidia какой по конкурентноспособности GeForce 6800 или выше?
статья "Введение в физический движок AGEIA PhysX SDK" | 12 фев. 2007 | 12:27 | #5 |
---|
Alexx
Спасибо! для начала втыкания самое то!
Спасибо! для начала втыкания самое то!
Отсечение невидимой геометрии | 12 фев. 2007 | 11:01 | #3 |
---|
Osiris
Начни с самого простого...
рассчитай для всех объектов(для начала статических) AABB и в цикле отрисовки проверяй их на видимость по Frustum.
если сложно поситать AABB ручками используй:
тогда рендер примет примерно такой вид:
дальше оптимизацию можно усложнить и сделать Scene Graph, объединяя в иерархию AABB объекты и можно большими частями откидывать большой объем геометрии, постепенно спускаясь низ по дереву.
Начни с самого простого...
рассчитай для всех объектов(для начала статических) 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 ); } ... }
зацените демку | 12 фев. 2007 | 10:51 | #38 |
---|
Джо
>А я себе вчера купил X1300 чтобы мои OpenGL демки работали на всём целевом железе...
ну и как не жалеешь? у меня тоде такая причина и купил Radeon тоже по поводу OpenGL да и картинка в Far Cry с водой была красивей да и другие игры выглядели красивей.
Sark7
GeForce 6600 все ок, но FPS не знаю сколько...
Radeon 9600 - красное окно :( и все... хотя драйвера не совсем новые 8.282.0.0 (02.08.2006 дата)
>А я себе вчера купил X1300 чтобы мои OpenGL демки работали на всём целевом железе...
ну и как не жалеешь? у меня тоде такая причина и купил Radeon тоже по поводу OpenGL да и картинка в Far Cry с водой была красивей да и другие игры выглядели красивей.
Sark7
GeForce 6600 все ок, но FPS не знаю сколько...
Radeon 9600 - красное окно :( и все... хотя драйвера не совсем новые 8.282.0.0 (02.08.2006 дата)
странный Access violation | 9 фев. 2007 | 17:04 | #14 |
---|
IronBunny
можно еще попробовать проверить результат возращемый _heapchk()
можно еще попробовать проверить результат возращемый _heapchk()
Экспортный плагин для 3DSMAX на Delphi (coming soon) | 8 фев. 2007 | 16:39 | #3 |
---|
Coriolis
чего ты так нервничаешь :) я никого не хотел обижать и ничего не имел ввиду, а просто спросил :)
чего ты так нервничаешь :) я никого не хотел обижать и ничего не имел ввиду, а просто спросил :)