Quantcast
Channel: GameDev.net
Viewing all articles
Browse latest Browse all 17825

[Bullet] btBvhTriangleMeshShape AABB problem

$
0
0
In the code snippet below, the static mesh I am adding to the engine always falls below zero. If the transform is at y zero, why would the bounding volume has a negative y value in it? Thanks Jack ////////////////////////////// /// AddStaticMesh void PhysicsMover::addStaticMesh(LPD3DXMESH pMesh) { btBvhTriangleMeshShape* staticShape = NULL; Transform* l_transform = m_simObject->FindComponentByType<Transform>(); DWORD numFaces = pMesh->GetNumFaces(); DWORD numIndices = numFaces * 3; if (numIndices < 65535) { typedef unsigned short IndexFormat; btTriangleIndexVertexArray* indexVertexArrays = new btTriangleIndexVertexArray(); LPDIRECT3DVERTEXBUFFER9 pVertices; pMesh->GetVertexBuffer(&pVertices); DWORD dwVertexSize = pMesh->GetNumBytesPerVertex(); DWORD dwNumVerts = pMesh->GetNumVertices(); BYTE* pVertexData; pVertices->Lock(0, 0, (void**)&pVertexData, 0); LPDIRECT3DINDEXBUFFER9 pIndices; pMesh->GetIndexBuffer(&pIndices); BYTE* pIndexData; pIndices->Lock(0, 0, (void**)&pIndexData, 0); btIndexedMesh iMesh; iMesh.m_numTriangles = pMesh->GetNumFaces(); iMesh.m_triangleIndexBase = (const unsigned char *)pIndexData; iMesh.m_triangleIndexStride = 3 * sizeof(IndexFormat); iMesh.m_numVertices = dwNumVerts; iMesh.m_vertexBase = (const unsigned char *)pVertexData; iMesh.m_vertexStride = sizeof(D3DXVECTOR3); indexVertexArrays->addIndexedMesh( iMesh, PHY_SHORT ); // For non-moving objects only staticShape = new btBvhTriangleMeshShape(indexVertexArrays, true); m_collisionShapes.push_back(staticShape); pIndices->Unlock(); pVertices->Unlock(); } else { typedef DWORD IndexFormat; btTriangleIndexVertexArray* indexVertexArrays = new btTriangleIndexVertexArray(); LPDIRECT3DVERTEXBUFFER9 pVertices; pMesh->GetVertexBuffer(&pVertices); DWORD dwVertexSize = pMesh->GetNumBytesPerVertex(); DWORD dwNumVerts = pMesh->GetNumVertices(); BYTE* pVertexData; pVertices->Lock(0, 0, (void**)&pVertexData, 0); LPDIRECT3DINDEXBUFFER9 pIndices; pMesh->GetIndexBuffer(&pIndices); BYTE* pIndexData; pIndices->Lock(0, 0, (void**)&pIndexData, 0); indexVertexArrays = new btTriangleIndexVertexArray(pMesh->GetNumFaces(), (int*)pIndexData, 3 * sizeof(int), pMesh->GetNumVertices(), (btScalar*)pVertexData, dwVertexSize); // For non-moving objects only staticShape = new btBvhTriangleMeshShape(indexVertexArrays, true); m_collisionShapes.push_back(staticShape); pIndices->Unlock(); pVertices->Unlock(); } // collision shapes are attached to transforms and not coupled to meshes themselves btTransform startTransform; startTransform.setIdentity(); D3DXVECTOR3 ori = l_transform->getPosition(); if (m_simObject->m_name=="Warehouse3") { startTransform.setOrigin(btVector3(ori.x, ori.y, ori.z)); } else { //startTransform.setOrigin(btVector3(ori.x, // 0, ori.z)); // the floor of the warehouse1 has fallen by 0.17 meters startTransform.setOrigin(btVector3(ori.x, ori.y, ori.z)); } AgentMotionState* myMotionState = new AgentMotionState(m_simObject); myMotionState->setWorldTransform(startTransform); btRigidBody::btRigidBodyConstructionInfo cInfo(0, myMotionState, staticShape); btRigidBody* body = new btRigidBody(cInfo); body->setContactProcessingThreshold(m_defaultContactProcessingThreshold); btVector3 bmin, bmax; staticShape->getAabb(startTransform, bmin, bmax); m_dynamicsWorld->addRigidBody(body); }

Viewing all articles
Browse latest Browse all 17825

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>