float getInterpolatedVoxelValue(Point3f pt) {
		int iMax;
		int xDown = indexDown(pt.x, iMax = voxelCounts[0] - 1);
		int xUp = xDown + (pt.x < 0 || xDown == iMax ? 0 : 1);
		int yDown = indexDown(pt.y, iMax = voxelCounts[1] - 1);
		int yUp = yDown + (pt.y < 0 || yDown == iMax ? 0 : 1);
		int zDown = indexDown(pt.z, iMax = voxelCounts[2] - 1);
		int zUp = zDown + (pt.z < 0 || zDown == iMax || jvxlDataIs2dContour ? 0 : 1);
		float v1 = getFractional2DValue(pt.x - xDown, pt.y - yDown, voxelData[xDown][yDown][zDown],
				voxelData[xUp][yDown][zDown], voxelData[xDown][yUp][zDown], voxelData[xUp][yUp][zDown]);
		float v2 = getFractional2DValue(pt.x - xDown, pt.y - yDown, voxelData[xDown][yDown][zUp],
				voxelData[xUp][yDown][zUp], voxelData[xDown][yUp][zUp], voxelData[xUp][yUp][zUp]);
		return v1 + (pt.z - zDown) * (v2 - v1);
	}