У меня всё работает.
Вот мой проверочный код.
Единственное, что у меня небыло под рукой модели сложнее бокса, так что проверял на нём
Code
from pandac.PandaModules import *
import direct.directbase.DirectStart
from direct.showbase.DirectObject import DirectObject
b1=loader.loadModel('box')
b1.reparentTo(render)
b1.setHpr(45,45,45)
b1.showTightBounds()
min1,max1=b1.getTightBounds()
print min1,max1
b2=loader.loadModel('box')
b2.reparentTo(render)
b2.showTightBounds()
min2,max2=b1.getTightBounds()
print min2,max2
class control(DirectObject):
def __init__(self):
self.accept('arrow_left',self.moveObj,[Vec3(0.5,0,0)])
self.accept('arrow_right',self.moveObj,[Vec3(-0.5,0,0)])
self.accept('arrow_up',self.moveObj,[Vec3(0,0.5,0)])
self.accept('arrow_down',self.moveObj,[Vec3(0,-0.5,0)])
self.accept('a',self.moveObj,[Vec3(0,0,0.5)])
self.accept('z',self.moveObj,[Vec3(0,0,-0.5)])
def moveObj(self,vector):
b2.setPos(b2,vector)
print self.checkCollision(b1,b2)
def checkCollision(self,np1,np2):
res=False
min1,max1=np1.getTightBounds()
min2,max2=np2.getTightBounds()
if ((min1[0]<=min2[0]<=max1[0]) or (min1[0]<=max2[0]<=max1[0])):
if ((min1[1]<=min2[1]<=max1[1]) or (min1[1]<=max2[1]<=max1[1])):
if ((min1[2]<=min2[2]<=max1[2]) or (min1[2]<=max2[2]<=max1[2])):
res=True
return res
control()
run()