com.bulletphysics.collision.shapes.TriangleIndexVertexArray Maven / Gradle / Ivy
Show all versions of jbullet Show documentation
/*
* Java port of Bullet (c) 2008 Martin Dvorak
*
* 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.util.ObjectArrayList;
import java.nio.ByteBuffer;
/**
* TriangleIndexVertexArray allows to use multiple meshes, by indexing into existing
* triangle/index arrays. Additional meshes can be added using {@link #addIndexedMesh addIndexedMesh}.
*
* No duplicate is made of the vertex/index data, it only indexes into external vertex/index
* arrays. So keep those arrays around during the lifetime of this TriangleIndexVertexArray.
*
* @author jezek2
*/
public class TriangleIndexVertexArray extends StridingMeshInterface {
protected ObjectArrayList indexedMeshes = new ObjectArrayList();
private ByteBufferVertexData data = new ByteBufferVertexData();
public TriangleIndexVertexArray() {
}
/**
* Just to be backwards compatible.
*/
public TriangleIndexVertexArray(int numTriangles, ByteBuffer triangleIndexBase, int triangleIndexStride, int numVertices, ByteBuffer vertexBase, int vertexStride) {
IndexedMesh mesh = new IndexedMesh();
mesh.numTriangles = numTriangles;
mesh.triangleIndexBase = triangleIndexBase;
mesh.triangleIndexStride = triangleIndexStride;
mesh.numVertices = numVertices;
mesh.vertexBase = vertexBase;
mesh.vertexStride = vertexStride;
addIndexedMesh(mesh);
}
public void addIndexedMesh(IndexedMesh mesh) {
addIndexedMesh(mesh, ScalarType.INTEGER);
}
public void addIndexedMesh(IndexedMesh mesh, ScalarType indexType) {
indexedMeshes.add(mesh);
indexedMeshes.getQuick(indexedMeshes.size() - 1).indexType = indexType;
}
@Override
public VertexData getLockedVertexIndexBase(int subpart) {
assert (subpart < getNumSubParts());
IndexedMesh mesh = indexedMeshes.getQuick(subpart);
data.vertexCount = mesh.numVertices;
data.vertexData = mesh.vertexBase;
//#ifdef BT_USE_DOUBLE_PRECISION
//type = PHY_DOUBLE;
//#else
data.vertexType = ScalarType.FLOAT;
//#endif
data.vertexStride = mesh.vertexStride;
data.indexCount = mesh.numTriangles*3;
data.indexData = mesh.triangleIndexBase;
data.indexStride = mesh.triangleIndexStride/3;
data.indexType = mesh.indexType;
return data;
}
@Override
public VertexData getLockedReadOnlyVertexIndexBase(int subpart) {
return getLockedVertexIndexBase(subpart);
}
/**
* unLockVertexBase finishes the access to a subpart of the triangle mesh.
* Make a call to unLockVertexBase when the read and write access (using getLockedVertexIndexBase) is finished.
*/
@Override
public void unLockVertexBase(int subpart) {
data.vertexData = null;
data.indexData = null;
}
@Override
public void unLockReadOnlyVertexBase(int subpart) {
unLockVertexBase(subpart);
}
/**
* getNumSubParts returns the number of seperate subparts.
* Each subpart has a continuous array of vertices and indices.
*/
@Override
public int getNumSubParts() {
return indexedMeshes.size();
}
public ObjectArrayList getIndexedMeshArray() {
return indexedMeshes;
}
@Override
public void preallocateVertices(int numverts) {
}
@Override
public void preallocateIndices(int numindices) {
}
}