Java源码示例:com.bulletphysics.collision.dispatch.CollisionDispatcher

示例1
public PhysicsWorldJBullet(final boolean gravity) {

		// collision configuration contains default setup for memory, collision
		// setup. Advanced users can create their own configuration.
		final CollisionConfiguration collisionConfiguration = new DefaultCollisionConfiguration();

		// use the default collision dispatcher. For parallel processing you
		// can use a diffent dispatcher (see Extras/BulletMultiThreaded)
		final CollisionDispatcher dispatcher = new CollisionDispatcher(collisionConfiguration);

		// the maximum size of the collision world. Make sure objects stay
		// within these boundaries
		// Don't make the world AABB size too large, it will harm simulation
		// quality and performance
		final Vector3f worldAabbMin = new Vector3f(-10000, -10000, -10000);
		final Vector3f worldAabbMax = new Vector3f(10000, 10000, 10000);
		final AxisSweep3_32 overlappingPairCache = new AxisSweep3_32(worldAabbMin, worldAabbMax, MAX_OBJECTS);

		final SequentialImpulseConstraintSolver solver = new SequentialImpulseConstraintSolver();

		dynamicsWorld = new DiscreteDynamicsWorld(dispatcher, overlappingPairCache, solver, collisionConfiguration);
		if (gravity == true) {
			dynamicsWorld.setGravity(new Vector3f(0.0f, 0.0f, -9.81f));
		} else {
			dynamicsWorld.setGravity(new Vector3f(0.0f, 0.0f, 0.0f));
		}
	}
 
示例2
/**
 * Has to be called from the (designated) physics thread
 */
public void create() {
    pQueueTL.set(pQueue);

    collisionConfiguration = new DefaultCollisionConfiguration();
    dispatcher = new CollisionDispatcher(collisionConfiguration);
    switch (broadphaseType) {
        case SIMPLE:
            broadphase = new SimpleBroadphase();
            break;
        case AXIS_SWEEP_3:
            broadphase = new AxisSweep3(Converter.convert(worldMin), Converter.convert(worldMax));
            break;
        case AXIS_SWEEP_3_32:
            broadphase = new AxisSweep3_32(Converter.convert(worldMin), Converter.convert(worldMax));
            break;
        case DBVT:
            broadphase = new DbvtBroadphase();
            break;
    }

    solver = new SequentialImpulseConstraintSolver();

    dynamicsWorld = new DiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration);
    dynamicsWorld.setGravity(new javax.vecmath.Vector3f(0, -9.81f, 0));

    broadphase.getOverlappingPairCache().setInternalGhostPairCallback(new GhostPairCallback());
    GImpactCollisionAlgorithm.registerAlgorithm(dispatcher);

    physicsSpaceTL.set(this);
    //register filter callback for tick / collision
    setTickCallback();
    setContactCallbacks();
    //register filter callback for collision groups
    setOverlapFilterCallback();
}
 
示例3
/**
 * Has to be called from the (designated) physics thread
 */
public void create() {
    pQueueTL.set(pQueue);

    collisionConfiguration = new DefaultCollisionConfiguration();
    dispatcher = new CollisionDispatcher(collisionConfiguration);
    switch (broadphaseType) {
        case SIMPLE:
            broadphase = new SimpleBroadphase();
            break;
        case AXIS_SWEEP_3:
            broadphase = new AxisSweep3(Converter.convert(worldMin), Converter.convert(worldMax));
            break;
        case AXIS_SWEEP_3_32:
            broadphase = new AxisSweep3_32(Converter.convert(worldMin), Converter.convert(worldMax));
            break;
        case DBVT:
            broadphase = new DbvtBroadphase();
            break;
    }

    solver = new SequentialImpulseConstraintSolver();

    dynamicsWorld = new DiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration);
    dynamicsWorld.setGravity(new javax.vecmath.Vector3f(0, -9.81f, 0));

    broadphase.getOverlappingPairCache().setInternalGhostPairCallback(new GhostPairCallback());
    GImpactCollisionAlgorithm.registerAlgorithm(dispatcher);

    physicsSpaceTL.set(this);
    //register filter callback for tick / collision
    setTickCallback();
    setContactCallbacks();
    //register filter callback for collision groups
    setOverlapFilterCallback();
}
 
示例4
public static void main(String[] args) {

		BroadphaseInterface broadphase = new DbvtBroadphase();
		DefaultCollisionConfiguration collisionConfiguration = new DefaultCollisionConfiguration();
		CollisionDispatcher dispatcher = new CollisionDispatcher(collisionConfiguration);

		SequentialImpulseConstraintSolver solver = new SequentialImpulseConstraintSolver();

		DiscreteDynamicsWorld dynamicsWorld = new DiscreteDynamicsWorld(dispatcher, broadphase, solver,
				collisionConfiguration);

		// set the gravity of our world
		dynamicsWorld.setGravity(new Vector3f(0, -10, 0));

		// setup our collision shapes
		CollisionShape groundShape = new StaticPlaneShape(new Vector3f(0, 1, 0), 1);
		CollisionShape fallShape = new SphereShape(1);

		// setup the motion state
		DefaultMotionState groundMotionState = new DefaultMotionState(
				new Transform(new Matrix4f(new Quat4f(0, 0, 0, 1), new Vector3f(0, -1, 0), 1.0f)));

		RigidBodyConstructionInfo groundRigidBodyCI = new RigidBodyConstructionInfo(0, groundMotionState, groundShape,
				new Vector3f(0, 0, 0));
		RigidBody groundRigidBody = new RigidBody(groundRigidBodyCI);

		dynamicsWorld.addRigidBody(groundRigidBody); // add our ground to the
														// dynamic world..

		// setup the motion state for the ball
		DefaultMotionState fallMotionState = new DefaultMotionState(
				new Transform(new Matrix4f(new Quat4f(0, 0, 0, 1), new Vector3f(0, 100, 0), 1.0f)));

		// This we're going to give mass so it responds to gravity
		int mass = 1;

		Vector3f fallInertia = new Vector3f(0, 0, 0);
		fallShape.calculateLocalInertia(mass, fallInertia);

		RigidBodyConstructionInfo fallRigidBodyCI = new RigidBodyConstructionInfo(mass, fallMotionState, fallShape,
				fallInertia);
		RigidBody fallRigidBody = new RigidBody(fallRigidBodyCI);

		// now we add it to our physics simulation
		dynamicsWorld.addRigidBody(fallRigidBody);

		for (int i = 0; i < 300; i++) {
			dynamicsWorld.stepSimulation(1 / 60.f, 10);

			Transform trans = new Transform();
			fallRigidBody.getMotionState().getWorldTransform(trans);

			System.out.println("sphere height: " + trans.origin.y);
		}
	}