im Trying to make a .egg collide with collisionSpheres.
from direct.showbase.ShowBase import ShowBase
from direct.interval.IntervalGlobal import Sequence, Func, Wait
from pandac.PandaModules import CollisionTraverser, CollisionHandlerEvent
from pandac.PandaModules import CollisionNode, CollisionSphere
from pandac.PandaModules import VBase4
from pandac.PandaModules import Point3
from panda3d.core import BitMask32
class Voxelize(ShowBase):
def __init__(self):
ShowBase.__init__(self)
base.cTrav = CollisionTraverser()
self.collHandEvent = CollisionHandlerEvent()
self.collHandEvent.addInPattern('%fn-into-%in')
self.createVoxelField(2, .5)
self.loadModel('models/ship.egg')
def createVoxelField(self, CubeSize, VoxelSize):
for i in range(CubeSize):
for k in range(CubeSize):
for j in range(CubeSize):
self.makeVoxel(i,k,j,VoxelSize)
def loadModel(self, modelPath):
model = loader.loadModel(str(modelPath))
model.reparentTo(render)
geomnode = model.find('**/-GeomNode').node()
geomnode.setIntoCollideMask(BitMask32.bit(1))
base.cTrav.addCollider(model, self.collHandEvent)
def makeVoxel(self, x, y, z, size):
center = Point3(0,0,0)
Cnode = CollisionNode('VoxelCollisionNode')
node = render.attachNewNode(Cnode)
sphere = CollisionSphere(center,size)
Cnode.addSolid(sphere)
node.setPos(x,y,z)
node.show()
base.cTrav.addCollider(node, self.collHandEvent)
thats what i got but i get errors on base.cTrav.addCollider(model, self.collHandEvent) any ideas?
EDIT: well i seem to have gotten them to collide with the visible geometry. My problem now is removing the Nodes containing the collisionSolids that AREN’T collidibg with the visible geometry. new Code
from direct.showbase.ShowBase import ShowBase
from direct.interval.IntervalGlobal import Sequence, Func, Wait
from pandac.PandaModules import CollisionTraverser, CollisionHandlerQueue
from pandac.PandaModules import CollisionNode, CollisionSphere
from pandac.PandaModules import VBase4
from pandac.PandaModules import Point3
from panda3d.core import BitMask32
class Voxelize(ShowBase):
def __init__(self):
ShowBase.__init__(self)
self.CubeSize = 5
base.cTrav = CollisionTraverser()
self.collHandEvent = CollisionHandlerQueue()
self.createVoxelField(self.CubeSize, .5)
self.loadModel('models/ship.egg')
base.cTrav.traverse(render)
for i in range(self.collHandEvent.getNumEntries()):
entry = self.collHandEvent.getEntry(i)
if entry.hasInto() == True:
this = entry.getFromNodePath()
this.hide()
print(this)
def createVoxelField(self, CubeSize, VoxelSize):
for i in range(CubeSize):
for k in range(CubeSize):
for j in range(CubeSize):
self.makeVoxel(i,k,j,VoxelSize)
def loadModel(self, modelPath):
model = loader.loadModel(str(modelPath))
model.reparentTo(render)
model.setPos(self.CubeSize/2, self.CubeSize/2, self.CubeSize/2)
geomnode = model.find('**/-GeomNode').node()
geomnode.setIntoCollideMask(BitMask32.bit(1))
def makeVoxel(self, x, y, z, size):
center = Point3(0,0,0)
Cnode = CollisionNode('VoxelCollisionNode')
node = render.attachNewNode(Cnode)
sphere = CollisionSphere(center,size)
Cnode.addSolid(sphere)
node.setPos(x,y,z)
node.show()
base.cTrav.addCollider(node, self.collHandEvent)
def collide(self, collEntry):
print(collEntry)
app = Voxelize()
app.run()