Package com.bulletphysics.collision.narrowphase

Source Code of com.bulletphysics.collision.narrowphase.TriangleConvexcastCallback

/*
* Java port of Bullet (c) 2008 Martin Dvorak <jezek2@advel.cz>
*
* Bullet Continuous Collision Detection and Physics Library
* Copyright (c) 2003-2008 Erwin Coumans  http://www.bulletphysics.com/
*
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from
* the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
*    claim that you wrote the original software. If you use this software
*    in a product, an acknowledgment in the product documentation would be
*    appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
*    misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/

package com.bulletphysics.collision.narrowphase;

import com.bulletphysics.collision.narrowphase.ConvexCast.CastResult;
import com.bulletphysics.collision.shapes.ConvexShape;
import com.bulletphysics.collision.shapes.TriangleCallback;
import com.bulletphysics.collision.shapes.TriangleShape;
import com.bulletphysics.linearmath.Transform;
import javax.vecmath.Vector3f;

/**
*
* @author jezek2
*/
public abstract class TriangleConvexcastCallback extends TriangleCallback {

  public ConvexShape convexShape;
  public final Transform convexShapeFrom = new Transform();
  public final Transform convexShapeTo = new Transform();
  public final Transform triangleToWorld = new Transform();
  public float hitFraction;
  public float triangleCollisionMargin;

  public TriangleConvexcastCallback(ConvexShape convexShape, Transform convexShapeFrom, Transform convexShapeTo, Transform triangleToWorld, float triangleCollisionMargin) {
    this.convexShape = convexShape;
    this.convexShapeFrom.set(convexShapeFrom);
    this.convexShapeTo.set(convexShapeTo);
    this.triangleToWorld.set(triangleToWorld);
    this.hitFraction = 1f;
    this.triangleCollisionMargin = triangleCollisionMargin;
  }
 
  public void processTriangle(Vector3f[] triangle, int partId, int triangleIndex) {
    TriangleShape triangleShape = new TriangleShape(triangle[0], triangle[1], triangle[2]);
    triangleShape.setMargin(triangleCollisionMargin);

    VoronoiSimplexSolver simplexSolver = new VoronoiSimplexSolver();
    GjkEpaPenetrationDepthSolver gjkEpaPenetrationSolver = new GjkEpaPenetrationDepthSolver();

    //#define  USE_SUBSIMPLEX_CONVEX_CAST 1
    //if you reenable USE_SUBSIMPLEX_CONVEX_CAST see commented out code below
    //#ifdef USE_SUBSIMPLEX_CONVEX_CAST
    // TODO: implement ContinuousConvexCollision
    SubsimplexConvexCast convexCaster = new SubsimplexConvexCast(convexShape, triangleShape, simplexSolver);
    //#else
    // //btGjkConvexCast  convexCaster(m_convexShape,&triangleShape,&simplexSolver);
    //btContinuousConvexCollision convexCaster(m_convexShape,&triangleShape,&simplexSolver,&gjkEpaPenetrationSolver);
    //#endif //#USE_SUBSIMPLEX_CONVEX_CAST

    CastResult castResult = new CastResult();
    castResult.fraction = 1f;
    if (convexCaster.calcTimeOfImpact(convexShapeFrom, convexShapeTo, triangleToWorld, triangleToWorld, castResult)) {
      // add hit
      if (castResult.normal.lengthSquared() > 0.0001f) {
        if (castResult.fraction < hitFraction) {

          /* btContinuousConvexCast's normal is already in world space */
          /*
          //#ifdef USE_SUBSIMPLEX_CONVEX_CAST
          // rotate normal into worldspace
          convexShapeFrom.basis.transform(castResult.normal);
          //#endif //USE_SUBSIMPLEX_CONVEX_CAST
          */
          castResult.normal.normalize();

          reportHit(castResult.normal,
              castResult.hitPoint,
              castResult.fraction,
              partId,
              triangleIndex);
        }
      }
    }
  }

  public abstract float reportHit(Vector3f hitNormalLocal, Vector3f hitPointLocal, float hitFraction, int partId, int triangleIndex);
 
}
TOP

Related Classes of com.bulletphysics.collision.narrowphase.TriangleConvexcastCallback

TOP
Copyright © 2018 www.massapi.com. 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.