com.bulletphysics.collision.broadphase.AxisSweep3_32 Maven / Gradle / Ivy
/*
* Java port of Bullet (c) 2008 Martin Dvorak
*
* AxisSweep3
* Copyright (c) 2006 Simon Hobbs
*
* 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.broadphase;
import javax.vecmath.Vector3f;
/**
* AxisSweep3_32 allows higher precision quantization and more objects compared
* to the {@link AxisSweep3} sweep and prune. This comes at the cost of more memory
* per handle, and a bit slower performance.
*
* @author jezek2
*/
public class AxisSweep3_32 extends AxisSweep3Internal {
public AxisSweep3_32(Vector3f worldAabbMin, Vector3f worldAabbMax) {
this(worldAabbMin, worldAabbMax, 1500000, null);
}
public AxisSweep3_32(Vector3f worldAabbMin, Vector3f worldAabbMax, int maxHandles) {
this(worldAabbMin, worldAabbMax, maxHandles, null);
}
public AxisSweep3_32(Vector3f worldAabbMin, Vector3f worldAabbMax, int maxHandles/* = 1500000*/, OverlappingPairCache pairCache/* = 0*/) {
super(worldAabbMin, worldAabbMax, 0xfffffffe, 0x7fffffff, maxHandles, pairCache);
// 1 handle is reserved as sentinel
assert (maxHandles > 1 && maxHandles < 2147483647);
}
@Override
protected EdgeArray createEdgeArray(int size) {
return new EdgeArrayImpl(size);
}
@Override
protected Handle createHandle() {
return new HandleImpl();
}
protected int getMask() {
return 0xFFFFFFFF;
}
protected static class EdgeArrayImpl extends EdgeArray {
private int[] pos;
private int[] handle;
public EdgeArrayImpl(int size) {
pos = new int[size];
handle = new int[size];
}
@Override
public void swap(int idx1, int idx2) {
int tmpPos = pos[idx1];
int tmpHandle = handle[idx1];
pos[idx1] = pos[idx2];
handle[idx1] = handle[idx2];
pos[idx2] = tmpPos;
handle[idx2] = tmpHandle;
}
@Override
public void set(int dest, int src) {
pos[dest] = pos[src];
handle[dest] = handle[src];
}
@Override
public int getPos(int index) {
return pos[index];
}
@Override
public void setPos(int index, int value) {
pos[index] = value;
}
@Override
public int getHandle(int index) {
return handle[index];
}
@Override
public void setHandle(int index, int value) {
handle[index] = value;
}
}
protected static class HandleImpl extends Handle {
private int minEdges0;
private int minEdges1;
private int minEdges2;
private int maxEdges0;
private int maxEdges1;
private int maxEdges2;
@Override
public int getMinEdges(int edgeIndex) {
switch (edgeIndex) {
default:
case 0: return minEdges0;
case 1: return minEdges1;
case 2: return minEdges2;
}
}
@Override
public void setMinEdges(int edgeIndex, int value) {
switch (edgeIndex) {
case 0: minEdges0 = value; break;
case 1: minEdges1 = value; break;
case 2: minEdges2 = value; break;
}
}
@Override
public int getMaxEdges(int edgeIndex) {
switch (edgeIndex) {
default:
case 0: return maxEdges0;
case 1: return maxEdges1;
case 2: return maxEdges2;
}
}
@Override
public void setMaxEdges(int edgeIndex, int value) {
switch (edgeIndex) {
case 0: maxEdges0 = value; break;
case 1: maxEdges1 = value; break;
case 2: maxEdges2 = value; break;
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy