void getPlanarVectors() {
		/*
		 * Imagine a parallelpiped defined by our original Vx, Vy, Vz. We pick ONE of these to be our "contour type"
		 * defining vector. I call that particular vector Vz here. It is the vector best aligned with the normal to the
		 * plane we are interested in visualizing, for which the normal is N. (N is just {a b c} in ax + by + cz + d =
		 * 0.)
		 * 
		 * We want to know what the new Vx' and Vy' are going to be for the planar parallelogram defining our marching
		 * "squares".
		 * 
		 * Vx' = Vx - Vz * (Vx dot N) / (Vz dot N) Vy' = Vy - Vz * (Vy dot N) / (Vz dot N)
		 * 
		 * Thus, if we start with a rectangular grid and Vz IS N, then Vx dot N is zero, so Vx' = Vx; if were to poorly
		 * choose Vz such that it was perpendicular to N, then Vz dot N would be 0, and our grid would have an
		 * infinitely long side.
		 * 
		 * For clues, see http://mathworld.wolfram.com/Point-PlaneDistance.html
		 * 
		 */

		planarVectors[2].set(0, 0, 0);

		if (thePlane == null)
			return; // done already

		Vector3f vZ = volumetricVectors[contourType];
		float vZdotNorm = vZ.dot(thePlaneNormal);
		switch (contourType) {
		case 0: // x
			planarVectors[0].scaleAdd(-volumetricVectors[1].dot(thePlaneNormal) / vZdotNorm, vZ, volumetricVectors[1]);
			planarVectors[1].scaleAdd(-volumetricVectors[2].dot(thePlaneNormal) / vZdotNorm, vZ, volumetricVectors[2]);
			break;
		case 1: // y
			planarVectors[0].scaleAdd(-volumetricVectors[2].dot(thePlaneNormal) / vZdotNorm, vZ, volumetricVectors[2]);
			planarVectors[1].scaleAdd(-volumetricVectors[0].dot(thePlaneNormal) / vZdotNorm, vZ, volumetricVectors[0]);
			break;
		case 2: // z
			planarVectors[0].scaleAdd(-volumetricVectors[0].dot(thePlaneNormal) / vZdotNorm, vZ, volumetricVectors[0]);
			planarVectors[1].scaleAdd(-volumetricVectors[1].dot(thePlaneNormal) / vZdotNorm, vZ, volumetricVectors[1]);
		}
	}