Example #1
0
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)));
}
Example #2
0
//---------------------------------------
void Mesh::DestroyMesh( Mesh*& mesh )
{
	Mesh*& mesh2 = mMeshRegistry[ mesh->mName ];
	if ( mesh2 )
	{
		UnregisterMesh( mesh->mName.c_str() );
		//	delete mesh2;
		mesh = 0;
	}
}