[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Panda3D - по русски » Panda3D » Общие вопросы » Обработка столкновений со сложными моделями.
Обработка столкновений со сложными моделями.
filkar2005Дата: Воскресенье, 04.04.2021, 19:19 | Сообщение # 1
Сержант
Группа: Пользователи
Сообщений: 24
Награды: 0
Репутация: 0
Статус: Offline
Есть ли возможность прописать физическому движку bullet в качестве формы коллизии свою 3д модель, или нужно самостоятельно прописывать через шары, параллелепипеды и т.д. ?
Есть ли вообще, более нормальные способы получения физ. объекта сложной сцены (несколько этажное здание, с лестницами внутри), чем прописывание всех примитивов вручную?


<°)))><

Сообщение отредактировал filkar2005 - Воскресенье, 04.04.2021, 19:19
 
serg-kkzДата: Воскресенье, 04.04.2021, 20:40 | Сообщение # 2
Генерал-лейтенант
Группа: Модераторы
Сообщений: 750
Награды: 3
Репутация: 17
Статус: Offline
На ряду с примитивами есть  и BulletTriangleMeshShape, этот код демонстрирует его использование.

Код
from direct.showbase.ShowBase import ShowBase

from panda3d.bullet import BulletRigidBodyNode, BulletTriangleMesh, BulletTriangleMeshShape, BulletDebugNode, BulletWorld
from panda3d.core import Vec3

base = ShowBase()

debugNode = BulletDebugNode('Debug')
debugNP = render.attachNewNode(debugNode)
debugNP.show()

world = BulletWorld()
world.setDebugNode(debugNP.node())
world.setGravity(Vec3(0, 0, -9.81))

model = loader.load_model("box")

geomnodes = model.findAllMatches('**/+GeomNode')
gn = geomnodes.getPath(0).node()
geom = gn.getGeom(0)

mesh = BulletTriangleMesh()
mesh.addGeom(geom)

shape = BulletTriangleMeshShape(mesh, dynamic = False)
nodeBox = BulletRigidBodyNode('Box')
nodeBox.addShape(shape)
#nodeBox.setMass(15)
world.attachRigidBody(nodeBox)

def update(task):
    world.doPhysics(globalClock.getDt())
    return task.cont
taskMgr.add(update, 'update')

base.run()


Если ваш объект содержит несколько геометрий, то необходимом выполнить рекурсию чтоб найти все геомы.


ООП  -  

Сообщение отредактировал serg-kkz - Воскресенье, 04.04.2021, 20:43
 
filkar2005Дата: Воскресенье, 04.04.2021, 21:41 | Сообщение # 3
Сержант
Группа: Пользователи
Сообщений: 24
Награды: 0
Репутация: 0
Статус: Offline
Объект был нарисован в goxel - воксельная 3д графика.  Я абсолютный профан в panda3d, поэтому не понимаю, что, как. Имеется модель в формате obj, но как её разобрать программно на примитивы я не понимаю.

Добавлено (04.04.2021, 22:47)
---------------------------------------------
Я попробовал. Просто передавая модель из вокселей, я получаю все части модели. Но не очень понял, как это работает.


<°)))><
 
Форум Panda3D - по русски » Panda3D » Общие вопросы » Обработка столкновений со сложными моделями.
  • Страница 1 из 1
  • 1
Поиск: