Войти
ПрограммированиеФорумФизика

Разбивание физического мира Bullet Physics на octree

#0
(Правка: 7:48) 7:38, 12 дек. 2019

Каким образом физический мир разбивается на октодерево? Для каждого создаётся свой btDiscreteDynamicsWorld?
Если так, то как различные btDiscreteDynamicsWorld взаимодействуют между собой, если потребуется?
Главным образом это требуется для потоковой загрузки локаций и организации их бесшовности.


#1
(Правка: 12:43) 12:37, 12 дек. 2019

Один btDiscreteDynamicsWorld на всю локацию. При подгрузке частей локации addRigidBody, при выгрузке removeRigidBody.

PS: проводились ли какие-либо измерения по расходу памяти/нагрузке на физический движок? Я к чему, быть может физическую модель локации загружать сразу на старте, а подгружать только графические ресурсы?

#2
(Правка: 14:03) 14:01, 12 дек. 2019

0xc0de
> При подгрузке частей локации addRigidBody, при выгрузке removeRigidBody.
И всего-то? :) А подгружать лучше всё сразу, так как все коллизии и прочее хранятся именно в описании объектов в файле локации.
Хотя в чём-то ты прав... надо будет обмозговать!

#3
14:33, 25 мар. 2020

Тоже интересна данная тема. Я использовал контейнер std::map <int, btRigidBody*> для всех (кроме ландшафта) физических объектов карты сразу, иногда по нескольку частей на объект, просто дополняя btDiscreteDynamicsWorld указателями на btRigidBody из индексов содержимого ближайших ячеек мира. 100 000 сглаженных кубиков + ландшафт 512x512, вроде не тормозит, по по оперативной памяти накладно.

ПрограммированиеФорумФизика