Package com.bulletphysics.collision.shapes

Examples of com.bulletphysics.collision.shapes.CollisionShape


  @Override
  public void setMargin(float margin) {
    collisionMargin = margin;
    int i = getNumChildShapes();
    while ((i--) != 0) {
      CollisionShape child = getChildShape(i);
      child.setMargin(margin);
    }

    needs_update = true;
  }
View Full Code Here


    dynamicsWorld = new DiscreteDynamicsWorld(dispatcher, overlappingPairCache, constraintSolver, collision_config);

    // Setup a big ground box
    {
      CollisionShape groundShape = new BoxShape(new Vector3f(200f, 10f, 200f));
      // TODO
      //m_collisionShapes.push_back(groundShape);
      Transform groundTransform = new Transform();
      groundTransform.setIdentity();
      groundTransform.origin.set(0f, -10f, 0f);
View Full Code Here

    //#ifdef FORCE_ZAXIS_UP
    //m_cameraUp = btVector3(0,0,1);
    //m_forwardAxis = 1;
    //#endif

    CollisionShape groundShape = new BoxShape(new Vector3f(50, 3, 50));
    collisionShapes.add(groundShape);
    collisionConfiguration = new DefaultCollisionConfiguration();
    dispatcher = new CollisionDispatcher(collisionConfiguration);
    Vector3f worldMin = new Vector3f(-1000, -1000, -1000);
    Vector3f worldMax = new Vector3f(1000, 1000, 1000);
    //overlappingPairCache = new AxisSweep3(worldMin, worldMax);
    //overlappingPairCache = new SimpleBroadphase();
    overlappingPairCache = new DbvtBroadphase();
    constraintSolver = new SequentialImpulseConstraintSolver();
    dynamicsWorld = new DiscreteDynamicsWorld(dispatcher, overlappingPairCache, constraintSolver, collisionConfiguration);
    //#ifdef FORCE_ZAXIS_UP
    //dynamicsWorld.setGravity(new Vector3f(0, 0, -10));
    //#endif

    //m_dynamicsWorld->setGravity(btVector3(0,0,0));
    Transform tr = new Transform();
    tr.setIdentity();

    // either use heightfield or triangle mesh
    //#define  USE_TRIMESH_GROUND 1
    //#ifdef USE_TRIMESH_GROUND

    final float TRIANGLE_SIZE = 20f;

    // create a triangle-mesh ground
    int vertStride = 4 * 3 /* sizeof(btVector3) */;
    int indexStride = 3 * 4 /* 3*sizeof(int) */;

    final int NUM_VERTS_X = 20;
    final int NUM_VERTS_Y = 20;
    final int totalVerts = NUM_VERTS_X * NUM_VERTS_Y;

    final int totalTriangles = 2 * (NUM_VERTS_X - 1) * (NUM_VERTS_Y - 1);

    vertices = ByteBuffer.allocateDirect(totalVerts * vertStride).order(ByteOrder.nativeOrder());
    ByteBuffer gIndices = ByteBuffer.allocateDirect(totalTriangles * 3 * 4).order(ByteOrder.nativeOrder());

    Vector3f tmp = new Vector3f();
    for (int i = 0; i < NUM_VERTS_X; i++) {
      for (int j = 0; j < NUM_VERTS_Y; j++) {
        float wl = 0.2f;
        // height set to zero, but can also use curved landscape, just uncomment out the code
        float height = 0f; // 20f * (float)Math.sin(i * wl) * (float)Math.cos(j * wl);
       
        //#ifdef FORCE_ZAXIS_UP
        //m_vertices[i+j*NUM_VERTS_X].setValue(
        //  (i-NUM_VERTS_X*0.5f)*TRIANGLE_SIZE,
        //  (j-NUM_VERTS_Y*0.5f)*TRIANGLE_SIZE,
        //  height
        //  );
        //#else
        tmp.set(
            (i - NUM_VERTS_X * 0.5f) * TRIANGLE_SIZE,
            height,
            (j - NUM_VERTS_Y * 0.5f) * TRIANGLE_SIZE);

        int index = i + j * NUM_VERTS_X;
        vertices.putFloat((index * 3 + 0) * 4, tmp.x);
        vertices.putFloat((index * 3 + 1) * 4, tmp.y);
        vertices.putFloat((index * 3 + 2) * 4, tmp.z);
        //#endif
      }
    }

    //int index=0;
    gIndices.clear();
    for (int i = 0; i < NUM_VERTS_X - 1; i++) {
      for (int j = 0; j < NUM_VERTS_Y - 1; j++) {
        gIndices.putInt(j * NUM_VERTS_X + i);
        gIndices.putInt(j * NUM_VERTS_X + i + 1);
        gIndices.putInt((j + 1) * NUM_VERTS_X + i + 1);

        gIndices.putInt(j * NUM_VERTS_X + i);
        gIndices.putInt((j + 1) * NUM_VERTS_X + i + 1);
        gIndices.putInt((j + 1) * NUM_VERTS_X + i);
      }
    }
    gIndices.flip();

    indexVertexArrays = new TriangleIndexVertexArray(totalTriangles,
        gIndices,
        indexStride,
        totalVerts, vertices, vertStride);

    boolean useQuantizedAabbCompression = true;
    groundShape = new BvhTriangleMeshShape(indexVertexArrays, useQuantizedAabbCompression);

    tr.origin.set(0, -4.5f, 0);

    //#else
//    //testing btHeightfieldTerrainShape
//    int width=128;
//    int length=128;
//    unsigned char* heightfieldData = new unsigned char[width*length];
//    {
//      for (int i=0;i<width*length;i++)
//      {
//        heightfieldData[i]=0;
//      }
//    }
//
//    char*  filename="heightfield128x128.raw";
//    FILE* heightfieldFile = fopen(filename,"r");
//    if (!heightfieldFile)
//    {
//      filename="../../heightfield128x128.raw";
//      heightfieldFile = fopen(filename,"r");
//    }
//    if (heightfieldFile)
//    {
//      int numBytes =fread(heightfieldData,1,width*length,heightfieldFile);
//      //btAssert(numBytes);
//      if (!numBytes)
//      {
//        printf("couldn't read heightfield at %s\n",filename);
//      }
//      fclose (heightfieldFile);
//    }
//
//
//    btScalar maxHeight = 20000.f;
//
//    bool useFloatDatam=false;
//    bool flipQuadEdges=false;
//
//    btHeightfieldTerrainShape* heightFieldShape = new btHeightfieldTerrainShape(width,length,heightfieldData,maxHeight,upIndex,useFloatDatam,flipQuadEdges);;
//    groundShape = heightFieldShape;
//
//    heightFieldShape->setUseDiamondSubdivision(true);
//
//    btVector3 localScaling(20,20,20);
//    localScaling[upIndex]=1.f;
//    groundShape->setLocalScaling(localScaling);
//
//    tr.setOrigin(btVector3(0,-64.5f,0));
//
    //#endif

    collisionShapes.add(groundShape);

    // create ground object
    localCreateRigidBody(0, tr, groundShape);

    //#ifdef FORCE_ZAXIS_UP
    //  //   indexRightAxis = 0;
    //  //   indexUpAxis = 2;
    //  //   indexForwardAxis = 1;
    //btCollisionShape* chassisShape = new btBoxShape(btVector3(1.f,2.f, 0.5f));
    //btCompoundShape* compound = new btCompoundShape();
    //btTransform localTrans;
    //localTrans.setIdentity();
    // //localTrans effectively shifts the center of mass with respect to the chassis
    //localTrans.setOrigin(btVector3(0,0,1));
    //#else
    CollisionShape chassisShape = new BoxShape(new Vector3f(1.0f, 0.5f, 2.0f));
    collisionShapes.add(chassisShape);

    CompoundShape compound = new CompoundShape();
    collisionShapes.add(compound);
    Transform localTrans = new Transform();
View Full Code Here

    else {
      trimeshShape = new BvhTriangleMeshShape(indexVertexArrays, useQuantizedAabbCompression);
      collisionShapes.add(trimeshShape);
    }

    CollisionShape groundShape = trimeshShape;

    //#else
    //btCollisionShape* groundShape = new btBoxShape(btVector3(50,3,50));
    //m_collisionShapes.push_back(groundShape);
    //#endif //USE_TRIMESH_SHAPE

    collisionConfiguration = new DefaultCollisionConfiguration();

//    //#ifdef USE_PARALLEL_DISPATCHER
//    #ifdef USE_WIN32_THREADING
//
//    int maxNumOutstandingTasks = 4;//number of maximum outstanding tasks
//    Win32ThreadSupport* threadSupport = new Win32ThreadSupport(Win32ThreadSupport::Win32ThreadConstructionInfo(
//                  "collision",
//                  processCollisionTask,
//                  createCollisionLocalStoreMemory,
//                  maxNumOutstandingTasks));
//    #else
//    ///todo other platform threading
//    ///Playstation 3 SPU (SPURS)  version is available through PS3 Devnet
//    ///Libspe2 SPU support will be available soon
//    ///pthreads version
//    ///you can hook it up to your custom task scheduler by deriving from btThreadSupportInterface
//    #endif
//
//    m_dispatcher = new  SpuGatheringCollisionDispatcher(threadSupport,maxNumOutstandingTasks,m_collisionConfiguration);
//    #else
    dispatcher = new CollisionDispatcher(collisionConfiguration);
    //#endif//USE_PARALLEL_DISPATCHER

    Vector3f worldMin = new Vector3f(-1000f, -1000f, -1000f);
    Vector3f worldMax = new Vector3f(1000f, 1000f, 1000f);
    //broadphase = new AxisSweep3(worldMin, worldMax);
    broadphase = new DbvtBroadphase();
    //broadphase = new SimpleBroadphase();
    solver = new SequentialImpulseConstraintSolver();
    dynamicsWorld = new DiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration);
    //#ifdef USE_PARALLEL_DISPATCHER
    //m_dynamicsWorld->getDispatchInfo().m_enableSPU=true;
    //#endif //USE_PARALLEL_DISPATCHER

    // JAVA NOTE: added
    dynamicsWorld.setDebugDrawer(new GLDebugDrawer(gl));
   
    float mass = 0f;
    Transform startTransform = new Transform();
    startTransform.setIdentity();
    startTransform.origin.set(0f, -2f, 0f);

    CollisionShape colShape;

    if (USE_BOX_SHAPE) {
      colShape = new BoxShape(new Vector3f(1f, 1f, 1f));
    }
    else {
      colShape = new CompoundShape();
      CollisionShape cylinderShape = new CylinderShapeX(new Vector3f(4, 1, 1));
      CollisionShape boxShape = new BoxShape(new Vector3f(4f, 1f, 1f));
      Transform localTransform = new Transform();
      localTransform.setIdentity();
      ((CompoundShape)colShape).addChildShape(localTransform, boxShape);
      Quat4f orn = new Quat4f();
      QuaternionUtil.setEuler(orn, BulletGlobals.SIMD_HALF_PI, 0f, 0f);
View Full Code Here

    float mass = 0f;
    Transform startTransform = new Transform();
    startTransform.setIdentity();

    CollisionShape staticboxShape1 = new BoxShape(new Vector3f(200f, 1f, 200f)); // floor
    CollisionShape staticboxShape2 = new BoxShape(new Vector3f(1f, 50f, 200f)); // left wall
    CollisionShape staticboxShape3 = new BoxShape(new Vector3f(1f, 50f, 200f)); // right wall
    CollisionShape staticboxShape4 = new BoxShape(new Vector3f(200f, 50f, 1f)); // front wall
    CollisionShape staticboxShape5 = new BoxShape(new Vector3f(200f, 50f, 1f)); // back wall

    CompoundShape staticScenario = new CompoundShape(); // static scenario

    startTransform.origin.set(0f, 0f, 0f);
    staticScenario.addChildShape(startTransform, staticboxShape1);
    startTransform.origin.set(-200f, 25f, 0f);
    staticScenario.addChildShape(startTransform, staticboxShape2);
    startTransform.origin.set(200f, 25f, 0f);
    staticScenario.addChildShape(startTransform, staticboxShape3);
    startTransform.origin.set(0f, 25f, 200f);
    staticScenario.addChildShape(startTransform, staticboxShape4);
    startTransform.origin.set(0f, 25f, -200f);
    staticScenario.addChildShape(startTransform, staticboxShape5);

    startTransform.origin.set(0f, 0f, 0f);

    RigidBody staticBody = localCreateRigidBody(mass, startTransform, staticScenario);

    staticBody.setCollisionFlags(staticBody.getCollisionFlags() | CollisionFlags.STATIC_OBJECT);

    // enable custom material callback
    //staticBody.setCollisionFlags(staticBody.getCollisionFlags() | CollisionFlags.CUSTOM_MATERIAL_CALLBACK);

    // static plane
    Vector3f normal = new Vector3f(0.4f, 1.5f, -0.4f);
    normal.normalize();
    CollisionShape staticplaneShape6 = new StaticPlaneShape(normal, 0f); // A plane

    startTransform.origin.set(0f, 0f, 0f);

    RigidBody staticBody2 = localCreateRigidBody(mass, startTransform, staticplaneShape6);

    staticBody2.setCollisionFlags(staticBody2.getCollisionFlags() | CollisionFlags.STATIC_OBJECT);

    for (int i=0; i<9; i++) {
      CollisionShape boxShape = new BoxShape(new Vector3f(1f, 1f, 1f));
      startTransform.origin.set(2f * i - 5f, 2f, -3f);
      localCreateRigidBody(1, startTransform, boxShape);
    }
  }
View Full Code Here

    if (shape.getShapeType() == BroadphaseNativeType.COMPOUND_SHAPE_PROXYTYPE) {
      CompoundShape compoundShape = (CompoundShape) shape;
      Transform childTrans = transformsPool.get();
      for (int i = compoundShape.getNumChildShapes() - 1; i >= 0; i--) {
        compoundShape.getChildTransform(i, childTrans);
        CollisionShape colShape = compoundShape.getChildShape(i);
        drawOpenGL(gl, childTrans, colShape, color, debugMode);
      }
      transformsPool.release(childTrans);
    }
    else {
View Full Code Here

    //#define SERIALIZE_TO_DISK 1
    //#ifdef SERIALIZE_TO_DISK
    trimeshShape = new BvhTriangleMeshShape(indexVertexArrays, useQuantizedAabbCompression);
    collisionShapes.add(trimeshShape);

    CollisionShape groundShape = trimeshShape;

    collisionConfiguration = new DefaultCollisionConfiguration();

    dispatcher = new CollisionDispatcher(collisionConfiguration);

    Vector3f worldMin = new Vector3f(-1000f, -1000f, -1000f);
    Vector3f worldMax = new Vector3f(1000f, 1000f, 1000f);
    //broadphase = new AxisSweep3(worldMin, worldMax);
    broadphase = new DbvtBroadphase();
    solver = new SequentialImpulseConstraintSolver();
    dynamicsWorld = new DiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration);

    // JAVA NOTE: added
    dynamicsWorld.setDebugDrawer(new GLDebugDrawer(gl));
   
    float mass = 0f;
    Transform startTransform = new Transform();
    startTransform.setIdentity();
    startTransform.origin.set(0f, -2f, 0f);

    CollisionShape colShape = new BoxShape(new Vector3f(1f, 1f, 1f));
    collisionShapes.add(colShape);

    {
      for (i = 0; i < 10; i++) {
        //btCollisionShape* colShape = new btCapsuleShape(0.5,2.0);//boxShape = new btSphereShape(1.f);
View Full Code Here

    dynamicsWorld.setDebugDrawer(new GLDebugDrawer(gl));

    // Setup a big ground box
    {
      CollisionShape groundShape = new BoxShape(new Vector3f(200f, 10f, 200f));
      Transform groundTransform = new Transform();
      groundTransform.setIdentity();
      groundTransform.origin.set(0f, -15f, 0f);
      localCreateRigidBody(0f, groundTransform, groundShape);
    }
View Full Code Here

    //#ifdef FORCE_ZAXIS_UP
    //cameraUp.set(0,0,1);
    //forwardAxis = 1;
    //#endif

    CollisionShape groundShape = new BoxShape(new Vector3f(50,3,50));
    collisionShapes.add(groundShape);
    collisionConfiguration = new DefaultCollisionConfiguration();
    dispatcher = new CollisionDispatcher(collisionConfiguration);
    Vector3f worldMin = new Vector3f(-1000,-1000,-1000);
    Vector3f worldMax = new Vector3f(1000,1000,1000);
    //overlappingPairCache = new AxisSweep3(worldMin,worldMax);
    overlappingPairCache = new DbvtBroadphase();
    constraintSolver = new SequentialImpulseConstraintSolver();
    dynamicsWorld = new DiscreteDynamicsWorld(dispatcher,overlappingPairCache,constraintSolver,collisionConfiguration);
    //#ifdef FORCE_ZAXIS_UP
    //m_dynamicsWorld->setGravity(btVector3(0,0,-10));
    //#endif

    //m_dynamicsWorld->setGravity(btVector3(0,0,0));
    Transform tr = new Transform();
    tr.setIdentity();

    // either use heightfield or triangle mesh
    //#define  USE_TRIMESH_GROUND 1
    //#ifdef USE_TRIMESH_GROUND
    final float TRIANGLE_SIZE=20f;

    // create a triangle-mesh ground
    int vertStride = 3*4;
    int indexStride = 3*4;

    final int NUM_VERTS_X = 20;
    final int NUM_VERTS_Y = 20;
    final int totalVerts = NUM_VERTS_X*NUM_VERTS_Y;

    final int totalTriangles = 2*(NUM_VERTS_X-1)*(NUM_VERTS_Y-1);

    vertices = ByteBuffer.allocateDirect(totalVerts*vertStride).order(ByteOrder.nativeOrder());
    ByteBuffer gIndices = ByteBuffer.allocateDirect(totalTriangles*3*4).order(ByteOrder.nativeOrder());

    for (int i=0;i<NUM_VERTS_X;i++)
    {
      for (int j=0;j<NUM_VERTS_Y;j++)
      {
        float wl = 0.2f;
        // height set to zero, but can also use curved landscape, just uncomment out the code
        float height = 0.f;//20.f*sinf(float(i)*wl)*cosf(float(j)*wl);
        //#ifdef FORCE_ZAXIS_UP
        //m_vertices[i+j*NUM_VERTS_X].setValue(
        //  (i-NUM_VERTS_X*0.5f)*TRIANGLE_SIZE,
        //  (j-NUM_VERTS_Y*0.5f)*TRIANGLE_SIZE,
        //  height
        //  );
        //#else
        int idx = (i+j*NUM_VERTS_X)*3*4;
        vertices.putFloat(idx+0*4, (i-NUM_VERTS_X*0.5f)*TRIANGLE_SIZE);
        vertices.putFloat(idx+1*4, height);
        vertices.putFloat(idx+2*4, (j-NUM_VERTS_Y*0.5f)*TRIANGLE_SIZE);
        //#endif
      }
    }

    //int index=0;
    for (int i=0;i<NUM_VERTS_X-1;i++)
    {
      for (int j=0;j<NUM_VERTS_Y-1;j++)
      {
        gIndices.putInt(j*NUM_VERTS_X+i);
        gIndices.putInt(j*NUM_VERTS_X+i+1);
        gIndices.putInt((j+1)*NUM_VERTS_X+i+1);

        gIndices.putInt(j*NUM_VERTS_X+i);
        gIndices.putInt((j+1)*NUM_VERTS_X+i+1);
        gIndices.putInt((j+1)*NUM_VERTS_X+i);
      }
    }
    gIndices.flip();

    indexVertexArrays = new TriangleIndexVertexArray(totalTriangles,
      gIndices,
      indexStride,
      totalVerts,vertices,vertStride);

    boolean useQuantizedAabbCompression = true;
    groundShape = new BvhTriangleMeshShape(indexVertexArrays,useQuantizedAabbCompression);

    tr.origin.set(0,-4.5f,0);
    //#else
    ////testing btHeightfieldTerrainShape
    //int width=128;
    //int length=128;
    //unsigned char* heightfieldData = new unsigned char[width*length];
    //{
    //  for (int i=0;i<width*length;i++)
    //  {
    //    heightfieldData[i]=0;
    //  }
    //}
    //
    //char*  filename="heightfield128x128.raw";
    //FILE* heightfieldFile = fopen(filename,"r");
    //if (!heightfieldFile)
    //{
    //  filename="../../heightfield128x128.raw";
    //  heightfieldFile = fopen(filename,"r");
    //}
    //if (heightfieldFile)
    //{
    //  int numBytes =fread(heightfieldData,1,width*length,heightfieldFile);
    //  //btAssert(numBytes);
    //  if (!numBytes)
    //  {
    //    printf("couldn't read heightfield at %s\n",filename);
    //  }
    //  fclose (heightfieldFile);
    //}
    //
    //
    //btScalar maxHeight = 20000.f;
    //
    //bool useFloatDatam=false;
    //bool flipQuadEdges=false;
    //
    //btHeightfieldTerrainShape* heightFieldShape = new btHeightfieldTerrainShape(width,length,heightfieldData,maxHeight,upIndex,useFloatDatam,flipQuadEdges);;
    //groundShape = heightFieldShape;
    //
    //heightFieldShape->setUseDiamondSubdivision(true);
    //
    //btVector3 localScaling(20,20,20);
    //localScaling[upIndex]=1.f;
    //groundShape->setLocalScaling(localScaling);
    //
    //tr.setOrigin(btVector3(0,-64.5f,0));
    //
    //#endif //

    collisionShapes.add(groundShape);

    // create ground object
    localCreateRigidBody(0,tr,groundShape);

    //#ifdef FORCE_ZAXIS_UP
    ////   indexRightAxis = 0;
    ////   indexUpAxis = 2;
    ////   indexForwardAxis = 1;
    //btCollisionShape* chassisShape = new btBoxShape(btVector3(1.f,2.f, 0.5f));
    //btCompoundShape* compound = new btCompoundShape();
    //btTransform localTrans;
    //localTrans.setIdentity();
    ////localTrans effectively shifts the center of mass with respect to the chassis
    //localTrans.setOrigin(btVector3(0,0,1));
    //#else
    CollisionShape chassisShape = new BoxShape(new Vector3f(1.f,0.5f,2.f));
    collisionShapes.add(chassisShape);

    CompoundShape compound = new CompoundShape();
    collisionShapes.add(compound);
    Transform localTrans = new Transform();
    localTrans.setIdentity();
    // localTrans effectively shifts the center of mass with respect to the chassis
    localTrans.origin.set(0,1,0);
    //#endif

    compound.addChildShape(localTrans,chassisShape);

    {
      CollisionShape suppShape = new BoxShape(new Vector3f(0.5f,0.1f,0.5f));
      collisionShapes.add(chassisShape);
      Transform suppLocalTrans = new Transform();
      suppLocalTrans.setIdentity();
      // localTrans effectively shifts the center of mass with respect to the chassis
      suppLocalTrans.origin.set(0f,1.0f,2.5f);
      compound.addChildShape(suppLocalTrans, suppShape);
    }

    tr.origin.set(0,0.f,0);

    carChassis = localCreateRigidBody(800,tr,compound);//chassisShape);
    //m_carChassis->setDamping(0.2,0.2);


    {
      CollisionShape liftShape = new BoxShape(new Vector3f(0.5f,2.0f,0.05f));
      collisionShapes.add(liftShape);
      Transform liftTrans = new Transform();
      liftStartPos.set(0.0f, 2.5f, 3.05f);
      liftTrans.setIdentity();
      liftTrans.origin.set(liftStartPos);
      liftBody = localCreateRigidBody(10,liftTrans, liftShape);

      Transform localA = new Transform(), localB = new Transform();
      localA.setIdentity();
      localB.setIdentity();
      MatrixUtil.setEulerZYX(localA.basis, 0, PI_2, 0);
      localA.origin.set(0.0f, 1.0f, 3.05f);
      MatrixUtil.setEulerZYX(localB.basis, 0, PI_2, 0);
      localB.origin.set(0.0f, -1.5f, -0.05f);
      liftHinge = new HingeConstraint(carChassis,liftBody, localA, localB);
      liftHinge.setLimit(-LIFT_EPS, LIFT_EPS);
      dynamicsWorld.addConstraint(liftHinge, true);

      CollisionShape forkShapeA = new BoxShape(new Vector3f(1.0f,0.1f,0.1f));
      collisionShapes.add(forkShapeA);
      CompoundShape forkCompound = new CompoundShape();
      collisionShapes.add(forkCompound);
      Transform forkLocalTrans = new Transform();
      forkLocalTrans.setIdentity();
      forkCompound.addChildShape(forkLocalTrans, forkShapeA);

      CollisionShape forkShapeB = new BoxShape(new Vector3f(0.1f,0.02f,0.6f));
      collisionShapes.add(forkShapeB);
      forkLocalTrans.setIdentity();
      forkLocalTrans.origin.set(-0.9f, -0.08f, 0.7f);
      forkCompound.addChildShape(forkLocalTrans, forkShapeB);

      CollisionShape forkShapeC = new BoxShape(new Vector3f(0.1f,0.02f,0.6f));
      collisionShapes.add(forkShapeC);
      forkLocalTrans.setIdentity();
      forkLocalTrans.origin.set(0.9f, -0.08f, 0.7f);
      forkCompound.addChildShape(forkLocalTrans, forkShapeC);

      Transform forkTrans = new Transform();
      forkStartPos.set(0.0f, 0.6f, 3.2f);
      forkTrans.setIdentity();
      forkTrans.origin.set(forkStartPos);
      forkBody = localCreateRigidBody(5, forkTrans, forkCompound);

      localA.setIdentity();
      localB.setIdentity();
      MatrixUtil.setEulerZYX(localA.basis, 0, 0, PI_2);
      localA.origin.set(0.0f, -1.9f, 0.05f);
      MatrixUtil.setEulerZYX(localB.basis, 0, 0, PI_2);
      localB.origin.set(0.0f, 0.0f, -0.1f);
      forkSlider = new SliderConstraint(liftBody, forkBody, localA, localB, true);
      forkSlider.setLowerLinLimit(0.1f);
      forkSlider.setUpperLinLimit(0.1f);
      forkSlider.setLowerAngLimit(-LIFT_EPS);
      forkSlider.setUpperAngLimit(LIFT_EPS);
      dynamicsWorld.addConstraint(forkSlider, true);
     
      CompoundShape loadCompound = new CompoundShape();
      collisionShapes.add(loadCompound);
      CollisionShape loadShapeA = new BoxShape(new Vector3f(2.0f,0.5f,0.5f));
      collisionShapes.add(loadShapeA);
      Transform loadTrans = new Transform();
      loadTrans.setIdentity();
      loadCompound.addChildShape(loadTrans, loadShapeA);
      CollisionShape loadShapeB = new BoxShape(new Vector3f(0.1f,1.0f,1.0f));
      collisionShapes.add(loadShapeB);
      loadTrans.setIdentity();
      loadTrans.origin.set(2.1f, 0.0f, 0.0f);
      loadCompound.addChildShape(loadTrans, loadShapeB);
      CollisionShape loadShapeC = new BoxShape(new Vector3f(0.1f,1.0f,1.0f));
      collisionShapes.add(loadShapeC);
      loadTrans.setIdentity();
      loadTrans.origin.set(-2.1f, 0.0f, 0.0f);
      loadCompound.addChildShape(loadTrans, loadShapeC);
      loadTrans.setIdentity();
View Full Code Here

  public CharacterDemo(IGL gl) {
    super(gl);
  }
 
  public void initPhysics() throws Exception {
    CollisionShape groundShape = new BoxShape(new Vector3f(50, 3, 50));
    collisionShapes.add(groundShape);

    collisionConfiguration = new DefaultCollisionConfiguration();
    dispatcher = new CollisionDispatcher(collisionConfiguration);
    Vector3f worldMin = new Vector3f(-1000f,-1000f,-1000f);
View Full Code Here

TOP

Related Classes of com.bulletphysics.collision.shapes.CollisionShape

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.