Доброго всем времени суток...
Вот недавно решил разобраться, как работает ODE в панде.
Узнавать решил по простому. Я немного переписал код с мануала на офф. сайте.
Code
from direct.directbase import DirectStart
from pandac.PandaModules import OdeWorld, OdeSimpleSpace, OdeJointGroup
from pandac.PandaModules import OdeBody, OdeMass, OdeTriMeshData, OdeTriMeshGeom
from pandac.PandaModules import BitMask32, CardMaker, Vec4, Quat
from random import randint, random
# Setup our physics world
world = OdeWorld()
world.setGravity(0, 0, -9.81)
# The surface table is needed for autoCollide
world.initSurfaceTable(1)
world.setSurfaceEntry(0, 0, 900, 0.0, 9.1, 0.9, 0.00001, 0.0, 0.002)
# Create a space and add a contactgroup to it to add the contact joints
space = OdeSimpleSpace()
space.setAutoCollideWorld(world)
contactgroup = OdeJointGroup()
space.setAutoCollideJointGroup(contactgroup)
do = loader.loadModel("do")
do.reparentTo(render)
do.setPos(0,0,20)
land = loader.loadModel("land")
land.reparentTo(render)
doBody = OdeBody(world)
M = OdeMass()
M.setSphere(30,10)
doBody.setMass(M)
doBody.setPosition(do.getPos(render))
doBody.setQuaternion(do.getQuat(render))
doTrime sh = OdeTriMeshData(do, True)
doCol = OdeTriMeshGeom(space, doTrimesh)
doCol.setBody(doBody)
landTrimesh = OdeTriMeshData(land, True)
landCol = OdeTriMeshGeom(space, landTrimesh)
# Set the camera position
def simTask(task):
space.autoCollide()
world.quickStep(globalClock.getDt())
do.setPosQuat(render, doBody.getPosition(), Quat(doBody.getQuaternion()))
contactgroup.empty() # Clear the contact joints
return task.cont
taskMgr.doMethodLater(0.5, simTask, "Physics Simulation")
run()
Вроде все работает нормально, НО иногда вылазит ошибка.
http://radikal.ru/F/s47.radikal.ru/i115/1006/37/c77bc044e23f.jpg.html (извините бб коды не работают...)
Что предложите делать?