possible btTriangleMesh bug

Coz
Posts: 10
Joined: Fri Mar 02, 2007 8:02 pm

possible btTriangleMesh bug

Post by Coz »

I'm using bullet version 2.74 and I have a function that has two ways of setting the mesh in a static triangle shape; one uses btTriangleMesh and the other uses btTriangleIndexVertexArray. I'm not interested in fixing this issue for myself( since I'll my working version ), but I'm interested in finding out if this is a bug, and if so, create a bug report.

When I drop a sphere on the static shape, the btTriangleMesh version collides, but the sphere continues falling; besides that, the debug drawing looks different between the two versions, as if the btTriangleMesh version is missing some vertex:

http://stashbox.org/528824/correct.jpg
http://stashbox.org/528818/incorrect.jpg

here are the parts where the two versions of the code are different, the first one uses btTriangleMesh and the second one btTriangleIndexVertexArray:

#if 0
btTriangleMesh *const model = new btTriangleMesh( true, false );

model -> preallocateVertices( NUM_VERTICES );
model -> preallocateIndices( NUM_VERTICES );

btVector3 vertex0, vertex1, vertex2;

for( int i = 0; i < NUM_TRIANGLES; )
{
vertex0 . setX( TRIANGLES[ i ] ); ++i;
vertex0 . setY( TRIANGLES[ i ] ); ++i;
vertex0 . setZ( TRIANGLES[ i ] ); ++i;

vertex1 . setX( TRIANGLES[ i ] ); ++i;
vertex1 . setY( TRIANGLES[ i ] ); ++i;
vertex1 . setZ( TRIANGLES[ i ] ); ++i;

vertex2 . setX( TRIANGLES[ i ] ); ++i;
vertex2 . setY( TRIANGLES[ i ] ); ++i;
vertex2 . setZ( TRIANGLES[ i ] ); ++i;

model -> addTriangle( vertex0, vertex1, vertex2, false );
}
#else
static unsigned int indices[ 2634/*NUM_VERTICES*/ ]; //FIXME

for( int i = 0; i < NUM_VERTICES; ++i )
{
indices[ i ] = i;
}

const int INDEX_TRI_SIZE = sizeof( int ) * 3;
const int VERTEX_SIZE = sizeof( float ) * 3;

// These two are ugly, but apparently necessary
const unsigned char *tri_indices;
tri_indices = reinterpret_cast< const unsigned char * >( indices );

const unsigned char *triangles;
triangles = reinterpret_cast< const unsigned char * >( &( TRIANGLES[ 0 ] ) );

btIndexedMesh mesh;
mesh . m_numTriangles = NUM_TRIANGLES;
mesh . m_triangleIndexBase = tri_indices;
mesh . m_triangleIndexStride = INDEX_TRI_SIZE;
mesh . m_numVertices = NUM_VERTICES;
mesh . m_vertexBase = triangles;
mesh . m_vertexStride = VERTEX_SIZE;

btTriangleIndexVertexArray *model = new btTriangleIndexVertexArray;
model -> addIndexedMesh( mesh );
#endif