TriangleMesh not working

Evan407
Posts: 22
Joined: Sun Jan 17, 2016 2:37 am

TriangleMesh not working

Post by Evan407 »

I have literally been trying to get this to work all day.

Code: Select all

	//ground collision shape
	/*ObjectArrayList<Vector3f> groundPs = new ObjectArrayList<>(); //WORKS
	groundPs.add(new Vector3f(-100,0,100));
	groundPs.add(new Vector3f(-100,0,-100));
	groundPs.add(new Vector3f(100,0,-100));
	groundPs.add(new Vector3f(100,0,100));
	ConvexHullShape groundCollisionShape = new ConvexHullShape(groundPs);*/

	//doesn't work
	ByteBuffer triangleIndexBase = BufferUtils.createByteBuffer(12);
	ByteBuffer vertexBase = BufferUtils.createByteBuffer(36);
	IntBuffer triangleIndexBaseIB = triangleIndexBase.asIntBuffer();
	FloatBuffer vertexBaseFB = vertexBase.asFloatBuffer();
	
	//triangle
	triangleIndexBaseIB.put(0);//4
	triangleIndexBaseIB.put(1);//8
	triangleIndexBaseIB.put(2);//12

	//vertices
	vertexBaseFB.put(-100f);//4
	vertexBaseFB.put(0);//8
	vertexBaseFB.put(100f);//12

	vertexBaseFB.put(100f);//16
	vertexBaseFB.put(0);//20
	vertexBaseFB.put(100f);//24

	vertexBaseFB.put(0);//28
	vertexBaseFB.put(0);//32
	vertexBaseFB.put(-100f);//36

	IndexedMesh groundIndexedMesh = new IndexedMesh();
	groundIndexedMesh.numTriangles = 1;
	groundIndexedMesh.numVertices = 3;
	groundIndexedMesh.triangleIndexBase = triangleIndexBase;
	groundIndexedMesh.triangleIndexStride = 12;//???
	groundIndexedMesh.vertexBase = vertexBase;
	groundIndexedMesh.vertexStride = 12;//???

	TriangleIndexVertexArray groundTriangleIndexVertexArray = new TriangleIndexVertexArray();
	groundTriangleIndexVertexArray.addIndexedMesh(groundIndexedMesh);
	GImpactMeshShape groundCollisionShape = new GImpactMeshShape(groundTriangleIndexVertexArray);
	//BvhTriangleMeshShape groundCollisionShape = new BvhTriangleMeshShape(groundTriangleIndexVertexArray, true);
At the top of the code the bit that is commented out, that works. It also works with a primitive box shape. But I cannot get it to work with a triangle mesh. I wanted to use btBvhTriangleMeshShape but after I couldn't get that to work I tried getting GImpactMeshShape to work. It just won't collide.

I would also like to mention the documentation on how to create an IndexedMesh is non existent. The biggest hint on how to do it is reading the comments on the source code http://bulletphysics.org/Bullet/BulletF ... ource.html
Evan407
Posts: 22
Joined: Sun Jan 17, 2016 2:37 am

Re: TriangleMesh not working

Post by Evan407 »

okay it magically started working

Code: Select all

	ByteBuffer triangleIndexBase = BufferUtils.createByteBuffer(12);
	ByteBuffer vertexBase = BufferUtils.createByteBuffer(36);
	IntBuffer triangleIndexBaseIB = triangleIndexBase.asIntBuffer();
	FloatBuffer vertexBaseFB = vertexBase.asFloatBuffer();
	
	//triangle
	triangleIndexBaseIB.put(0);//4
	triangleIndexBaseIB.put(1);//8
	triangleIndexBaseIB.put(2);//12

	//vertices
	vertexBaseFB.put(-100f);//4
	vertexBaseFB.put(0);//8
	vertexBaseFB.put(100f);//12

	vertexBaseFB.put(100f);//16
	vertexBaseFB.put(0);//20
	vertexBaseFB.put(100f);//24

	vertexBaseFB.put(0);//28
	vertexBaseFB.put(0);//32
	vertexBaseFB.put(-100f);//36

	IndexedMesh groundIndexedMesh = new IndexedMesh();
	groundIndexedMesh.numTriangles = 1;
	groundIndexedMesh.numVertices = 3;
	groundIndexedMesh.triangleIndexBase = triangleIndexBase;
	groundIndexedMesh.triangleIndexStride = 12;
	groundIndexedMesh.vertexBase = vertexBase;
	groundIndexedMesh.vertexStride = 12;

	TriangleIndexVertexArray groundTriangleIndexVertexArray = new TriangleIndexVertexArray();
	groundTriangleIndexVertexArray.addIndexedMesh(groundIndexedMesh);
	BvhTriangleMeshShape groundCollisionShape = new BvhTriangleMeshShape(groundTriangleIndexVertexArray,true);