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;
}
Exemple #2
0
/**
 * 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);
}