void EQPhysics::RegisterMesh(const std::string &ident, const std::vector<glm::vec3>& verts, const std::vector<unsigned int>& inds, const glm::vec3 &pos, EQPhysicsFlags flag) { UnregisterMesh(ident); if (verts.size() == 0 || inds.size() == 0) { return; } btTriangleMesh *mesh = new btTriangleMesh(); int face_count = (int)inds.size() / 3; for (int i = 0; i < face_count; ++i) { unsigned int i1 = inds[i * 3 + 0]; unsigned int i2 = inds[i * 3 + 1]; unsigned int i3 = inds[i * 3 + 2]; btVector3 v1(verts[i1].x, verts[i1].y, verts[i1].z); btVector3 v2(verts[i2].x, verts[i2].y, verts[i2].z); btVector3 v3(verts[i3].x, verts[i3].y, verts[i3].z); mesh->addTriangle(v1, v2, v3); } btBvhTriangleMeshShape *mesh_shape = new btBvhTriangleMeshShape(mesh, true, true); btTransform origin_transform; origin_transform.setIdentity(); origin_transform.setOrigin(btVector3(pos.x, pos.y, pos.z)); btDefaultMotionState* motionState = new btDefaultMotionState(origin_transform); btRigidBody::btRigidBodyConstructionInfo rb_info(0.0f, motionState, mesh_shape, btVector3(0.0f, 0.0f, 0.0f)); btRigidBody *rb = new btRigidBody(rb_info); imp->collision_world->addRigidBody(rb, (short)flag, (short)flag); imp->entity_info->insert(std::make_pair(ident, btMeshInfo(mesh, mesh_shape, rb))); }
//--------------------------------------- void Mesh::DestroyMesh( Mesh*& mesh ) { Mesh*& mesh2 = mMeshRegistry[ mesh->mName ]; if ( mesh2 ) { UnregisterMesh( mesh->mName.c_str() ); // delete mesh2; mesh = 0; } }