|
Hi guys, I'm pretty new to bullet and I'm writing a simple serializer/deserializer. I'm finding that I can serialize/deserialize all my rigidbodies and collision shapes but when I call SetUserPointer with some custom data ( a char* with a GUID in it ) on the object, this user data doesnt seem to serialize and I just get a null pointer on loading for the user pointer. Anyone used this functionality and seen similar results? Presumably, I doing something wrong?
Here is an extract of the code: (Notice I tried to set user pointer on the shape and the rigidbody to no success. .......
btTriangleMesh* trimesh = new btTriangleMesh();
for ( unsigned int i=0;i<pMeshData->m_positions.size()/3;i+=3) { btVector3 vertex1 = btVector3(static_cast<float>(pMeshData->m_positions[i].mData[0]),static_cast<float>(pMeshData->m_positions[i].mData[1]),static_cast<float>(pMeshData->m_positions[i].mData[2])); btVector3 vertex2 = btVector3(static_cast<float>(pMeshData->m_positions[i+1].mData[0]),static_cast<float>(pMeshData->m_positions[i+1].mData[1]),static_cast<float>(pMeshData->m_positions[i+2].mData[2])); btVector3 vertex3 = btVector3(static_cast<float>(pMeshData->m_positions[i+2].mData[0]),static_cast<float>(pMeshData->m_positions[i+2].mData[1]),static_cast<float>(pMeshData->m_positions[i+2].mData[2]));
trimesh->addTriangle(vertex1,vertex2,vertex3); }
bool useQuantizedAabbCompression = true; btBvhTriangleMeshShape * physicShape = new btBvhTriangleMeshShape(trimesh, useQuantizedAabbCompression); btTransform shapeTransform; shapeTransform.setIdentity();
// Create MotionState and RigidBody object for the ground shape btDefaultMotionState* motionState = new btDefaultMotionState(shapeTransform); btRigidBody::btRigidBodyConstructionInfo rbInfo(0, motionState, physicShape, btVector3(0, 0, 0)); btRigidBody* pRigidBody = new btRigidBody(rbInfo); struct UserData { char mName[64]; }; UserData* userData = new UserData();
snprintf (userData->mName,64,"%s",stringGUID);
pRigidBody->getCollisionShape()->setUserPointer(userData); pRigidBody->setUserPointer(userData); m_dynamicsWorld->addRigidBody(pRigidBody); m_collisionShapes.push_back(physicShape);
///serializing the data.
int maxSerializeBufferSize = 1024*1024*1; btDefaultSerializer* serializer = new btDefaultSerializer(maxSerializeBufferSize);
for (int i=0;i<m_collisionShapes.size();i++) { char* name = new char[20]; sprintf(name,"name%d",i); serializer->registerNameForPointer(m_collisionShapes[i],name); } m_dynamicsWorld->serialize(serializer); const unsigned char* pBuffer = serializer->getBufferPointer()); const unsigned int worldBufferSize = serializer->getCurrentBufferSize();
|