static bool transformPlane(const vector3df & point, const vector3df & normal,
						   const matrix4 & matrix, const plane3df & expected)
{
	plane3df plane(point, vector3df(normal).normalize());

	logTestString("\n     Pre: (%.3ff,%.3ff,%.3ff), %.3ff\n",
		plane.Normal.X, plane.Normal.Y, plane.Normal.Z, plane.D);

	matrix.transformPlane(plane);

	logTestString("    Post: (%.3ff,%.3ff,%.3ff), %.3ff\n",
		plane.Normal.X, plane.Normal.Y, plane.Normal.Z, plane.D);

	logTestString("Expected: (%.3ff,%.3ff,%.3ff), %.3ff\n",
		expected.Normal.X, expected.Normal.Y, expected.Normal.Z, expected.D);

	if(!sloppyComparePlanes(plane, expected))
	{
		logTestString("Unexpected result\n");
		assert_log(false);
		return false;
	}

	return true;
}
	void Polyhedron<Real>::transform(const matrix4<Real>& matrix)
	{
		for (uint i = 0; i < planes.size(); ++i)
			planes[i] = matrix.transformPlane(planes[i]);

		for (uint i = 0; i < vertices.size(); ++i)
			vertices[i] = matrix.transformVertex(vertices[i]);

	}