boost::shared_ptr<PhysicsMesh> ParticlePhysics::createConvexMesh(const char *filename, IStorm3D_Model_Object *object)
{
	boost::shared_ptr<PhysicsMesh> mesh(new PhysicsMesh());
	IStorm3D_Mesh *stormMesh = object->GetMesh();

	int vertexAmount = stormMesh->GetVertexCount();
	const Storm3D_Vertex *buffer = stormMesh->GetVertexBufferReadOnly();

	VC3 minValues(10000.f, 10000.f, 10000.f);
	VC3 maxValues(-10000.f, -10000.f, -10000.f);
	for(int i = 0; i < vertexAmount; ++i)
	{
		VC3 pos = buffer[i].position;

		minValues.x = std::min(minValues.x, pos.x);
		minValues.y = std::min(minValues.y, pos.y);
		minValues.z = std::min(minValues.z, pos.z);

		maxValues.x = std::max(maxValues.x, pos.x);
		maxValues.y = std::max(maxValues.y, pos.y);
		maxValues.z = std::max(maxValues.z, pos.z);
	}

	VC3 size = maxValues - minValues;
	if(size.x < MIN_BOX_SIZE)
	{
		float diff = (MIN_BOX_SIZE - size.x) * 0.5f;
		maxValues.x += diff;
		minValues.x -= diff;
	}
	if(size.y < MIN_BOX_SIZE)
	{
		float diff = (MIN_BOX_SIZE - size.y) * 0.5f;
		maxValues.y += diff;
		minValues.y -= diff;
	}
	if(size.z < MIN_BOX_SIZE)
	{
		float diff = (MIN_BOX_SIZE - size.z) * 0.5f;
		maxValues.z += diff;
		minValues.z -= diff;
	}

	mesh->size = (maxValues - minValues) * 0.5f;
	mesh->localPosition = minValues + mesh->size;
	mesh->localPosition.y -= mesh->size.y;
	mesh->volume = mesh->size.x * mesh->size.y * mesh->size.z * 2.f;

	return mesh;
}