com.bulletphysics.collision.shapes.ShapeHull Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jbullet Show documentation
Show all versions of jbullet Show documentation
JBullet - Java port of Bullet Physics Library
The newest version!
/*
* Java port of Bullet (c) 2008 Martin Dvorak
*
* ShapeHull implemented by John McCutchan.
*
* 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.shapes;
import com.bulletphysics.linearmath.MiscUtil;
import com.bulletphysics.linearmath.convexhull.*;
import com.bulletphysics.util.IntArrayList;
import com.bulletphysics.util.ObjectArrayList;
import cz.advel.stack.Stack;
import javax.vecmath.Vector3f;
/**
* ShapeHull takes a {@link ConvexShape}, builds the convex hull using {@link HullLibrary}
* and provides triangle indices and vertices.
*
* @author jezek2
*/
public class ShapeHull {
protected ObjectArrayList vertices = new ObjectArrayList();
protected IntArrayList indices = new IntArrayList();
protected int numIndices;
protected ConvexShape shape;
protected ObjectArrayList unitSpherePoints = new ObjectArrayList();
public ShapeHull(ConvexShape shape) {
this.shape = shape;
this.vertices.clear();
this.indices.clear();
this.numIndices = 0;
MiscUtil.resize(unitSpherePoints, NUM_UNITSPHERE_POINTS+ConvexShape.MAX_PREFERRED_PENETRATION_DIRECTIONS*2, Vector3f.class);
for (int i=0; i supportPoints = new ObjectArrayList();
MiscUtil.resize(supportPoints, NUM_UNITSPHERE_POINTS + ConvexShape.MAX_PREFERRED_PENETRATION_DIRECTIONS * 2, Vector3f.class);
for (int i=0; i getVertexPointer() {
return vertices;
}
public IntArrayList getIndexPointer() {
return indices;
}
////////////////////////////////////////////////////////////////////////////
private static int NUM_UNITSPHERE_POINTS = 42;
private static ObjectArrayList constUnitSpherePoints = new ObjectArrayList();
static {
constUnitSpherePoints.add(new Vector3f(0.000000f, -0.000000f, -1.000000f));
constUnitSpherePoints.add(new Vector3f(0.723608f, -0.525725f, -0.447219f));
constUnitSpherePoints.add(new Vector3f(-0.276388f, -0.850649f, -0.447219f));
constUnitSpherePoints.add(new Vector3f(-0.894426f, -0.000000f, -0.447216f));
constUnitSpherePoints.add(new Vector3f(-0.276388f, 0.850649f, -0.447220f));
constUnitSpherePoints.add(new Vector3f(0.723608f, 0.525725f, -0.447219f));
constUnitSpherePoints.add(new Vector3f(0.276388f, -0.850649f, 0.447220f));
constUnitSpherePoints.add(new Vector3f(-0.723608f, -0.525725f, 0.447219f));
constUnitSpherePoints.add(new Vector3f(-0.723608f, 0.525725f, 0.447219f));
constUnitSpherePoints.add(new Vector3f(0.276388f, 0.850649f, 0.447219f));
constUnitSpherePoints.add(new Vector3f(0.894426f, 0.000000f, 0.447216f));
constUnitSpherePoints.add(new Vector3f(-0.000000f, 0.000000f, 1.000000f));
constUnitSpherePoints.add(new Vector3f(0.425323f, -0.309011f, -0.850654f));
constUnitSpherePoints.add(new Vector3f(-0.162456f, -0.499995f, -0.850654f));
constUnitSpherePoints.add(new Vector3f(0.262869f, -0.809012f, -0.525738f));
constUnitSpherePoints.add(new Vector3f(0.425323f, 0.309011f, -0.850654f));
constUnitSpherePoints.add(new Vector3f(0.850648f, -0.000000f, -0.525736f));
constUnitSpherePoints.add(new Vector3f(-0.525730f, -0.000000f, -0.850652f));
constUnitSpherePoints.add(new Vector3f(-0.688190f, -0.499997f, -0.525736f));
constUnitSpherePoints.add(new Vector3f(-0.162456f, 0.499995f, -0.850654f));
constUnitSpherePoints.add(new Vector3f(-0.688190f, 0.499997f, -0.525736f));
constUnitSpherePoints.add(new Vector3f(0.262869f, 0.809012f, -0.525738f));
constUnitSpherePoints.add(new Vector3f(0.951058f, 0.309013f, 0.000000f));
constUnitSpherePoints.add(new Vector3f(0.951058f, -0.309013f, 0.000000f));
constUnitSpherePoints.add(new Vector3f(0.587786f, -0.809017f, 0.000000f));
constUnitSpherePoints.add(new Vector3f(0.000000f, -1.000000f, 0.000000f));
constUnitSpherePoints.add(new Vector3f(-0.587786f, -0.809017f, 0.000000f));
constUnitSpherePoints.add(new Vector3f(-0.951058f, -0.309013f, -0.000000f));
constUnitSpherePoints.add(new Vector3f(-0.951058f, 0.309013f, -0.000000f));
constUnitSpherePoints.add(new Vector3f(-0.587786f, 0.809017f, -0.000000f));
constUnitSpherePoints.add(new Vector3f(-0.000000f, 1.000000f, -0.000000f));
constUnitSpherePoints.add(new Vector3f(0.587786f, 0.809017f, -0.000000f));
constUnitSpherePoints.add(new Vector3f(0.688190f, -0.499997f, 0.525736f));
constUnitSpherePoints.add(new Vector3f(-0.262869f, -0.809012f, 0.525738f));
constUnitSpherePoints.add(new Vector3f(-0.850648f, 0.000000f, 0.525736f));
constUnitSpherePoints.add(new Vector3f(-0.262869f, 0.809012f, 0.525738f));
constUnitSpherePoints.add(new Vector3f(0.688190f, 0.499997f, 0.525736f));
constUnitSpherePoints.add(new Vector3f(0.525730f, 0.000000f, 0.850652f));
constUnitSpherePoints.add(new Vector3f(0.162456f, -0.499995f, 0.850654f));
constUnitSpherePoints.add(new Vector3f(-0.425323f, -0.309011f, 0.850654f));
constUnitSpherePoints.add(new Vector3f(-0.425323f, 0.309011f, 0.850654f));
constUnitSpherePoints.add(new Vector3f(0.162456f, 0.499995f, 0.850654f));
}
}