iPhysics* CreatePhysicsBox(float minx, float miny, float minz, float maxx, float maxy, float maxz, const Reflectivity* r, float mass,PhysicsType pt, bool hasCollision){ iGraphic* box=CreateBox(minx,miny,minz*MODEL_Z_AXIS,maxx,maxy,maxz*MODEL_Z_AXIS); Physics* rc= new Physics(mass,pt,CreateObject(box,r)); float xsq=maxx-minx; float ysq=maxy-miny; float zsq=maxz-minz; float coef=(1.0f/12.0f)*mass; if(hasCollision) rc->cg_=CreateCOBB(rc,Vector(xsq/2.0f,ysq/2.0f,zsq/2.0f)); else rc->cg_=0; xsq*=xsq; ysq*=ysq; zsq*=zsq; rc->setMomentInertia(Vector(coef*(ysq+zsq),coef*(xsq+zsq),coef*(xsq+ysq))); return rc; }
/** * clone * * Returns a clone of this object and the attached rb. */ iCollisionGeometry* COBB::clone() const{ // This is ugly but... iPhysics* rb = const_cast<iPhysics*>(getPhysics()); if (rb) { rb = rb->clone(); } return CreateCOBB(rb, _cinfo.radius); }