Well I kinda trying to recreate the method that converts Trimeshes into The jbullet ones that falcon uses in his jbullet implimentation
If you see anything that can help making the code better readable it would be really appreciated, also if you see mistakes a correction would be nice.
orginal for jme2
if(alreadyUsed(name)){
return;
}
///////////////////Stolen 1to1 from Falcons implementation/////////////////////////
TriangleIndexVertexArray jBulletMeshData = new TriangleIndexVertexArray();
IndexedMesh jBulletIndexedMesh = new IndexedMesh();
jBulletIndexedMesh.triangleIndexBase = ByteBuffer.allocate( node.getTriangleCount() * 3 * 4 );
jBulletIndexedMesh.vertexBase = ByteBuffer.allocate( node.getVertexCount() * 3 * 4 );
IntBuffer indices = node.getIndexBuffer();
indices.rewind();
FloatBuffer vertices = node.getVertexBuffer();
vertices.rewind();
int verticesLength = node.getVertexCount() * 3;
jBulletIndexedMesh.numVertices = verticesLength;
jBulletIndexedMesh.vertexStride = 12; //3 verts * 4 bytes per.
for ( int i = 0; i < verticesLength; i++ ) {
float tempFloat = vertices.get();
jBulletIndexedMesh.vertexBase.putFloat( tempFloat );
}
int indicesLength = node.getTriangleCount() * 3;
jBulletIndexedMesh.numTriangles = node.getTriangleCount();
jBulletIndexedMesh.triangleIndexStride = 12; //3 index entries * 4 bytes each.
for ( int i = 0; i < indicesLength; i++ ) {
jBulletIndexedMesh.triangleIndexBase.putInt( indices.get() );
}
jBulletMeshData.addIndexedMesh( jBulletIndexedMesh );
///////////////////Stolen 1to1 from Falcons implementation/////////////////////////
BvhTriangleMeshShape shape = new BvhTriangleMeshShape(jBulletMeshData,true);
Store(name,shape);
Well and now the ugly version from me for JME3
public static void AddToCache(String name,Mesh toconvert){
if(cache.get(name) != null){
throw new RuntimeException("Physiccache overload " + name);
}
//kinda based on falcons jme2 implementation
TriangleIndexVertexArray jBulletMeshData = new TriangleIndexVertexArray();
IndexedMesh jBulletIndexedMesh = new IndexedMesh();
jBulletIndexedMesh.triangleIndexBase = ByteBuffer.allocate( toconvert.getTriangleCount() * 3 * 4 );
jBulletIndexedMesh.vertexBase = ByteBuffer.allocate( toconvert.getVertexCount() * 3 * 4 );
jBulletIndexedMesh.triangleIndexBase.rewind();
jBulletIndexedMesh.vertexBase.rewind();
int count = 0;
Triangle tricache = new Triangle();
while(count < toconvert.getTriangleCount()){
toconvert.getTriangle(count, tricache);
//Add the index to the indexbase
int index = tricache.getIndex();
byte[] data = new byte[4];
// int -> byte[] O.o
for (int i = 0; i < 4; ++i) {
int shift = i << 3; // i * 8
data[3-i] = (byte)((index & (0xff << shift)) >>> shift);
}
jBulletIndexedMesh.triangleIndexBase.put(data);
//7and now the vectors :/
int vecindex = 0;
while(vecindex < 3){
Vector3f vector = tricache.get(vecindex);
int floatindex = 0;
while(floatindex < 3){
int value = Float.floatToRawIntBits(vector.get(vecindex));
byte[] result = new byte[4];
for (int i = 0; i < 4; i++) {
int offset = (result.length - 1 - i) * 8;
result[i] = (byte) ((value >>> offset) & 0xff);
}
jBulletIndexedMesh.vertexBase.put(result);
}
}
count++;
}
jBulletIndexedMesh.numTriangles = toconvert.getTriangleCount();
jBulletIndexedMesh.triangleIndexStride = 12; //3 index entries * 4 bytes each.
jBulletMeshData.addIndexedMesh( jBulletIndexedMesh );
BvhTriangleMeshShape shape = new BvhTriangleMeshShape(jBulletMeshData,true);
cache.put(name, shape);
}
*ducks* (due to shitty code)