public static void PixelCubeIso <T>(VoxelSeq seq, T renderer) where T : ITriangleRenderer <T> { int len = seq.Order.Count; ulong sizeX = seq.SizeX, sizeY = seq.SizeY, sizeZ = seq.SizeZ, pixelWidth = (sizeY + sizeX) * 2 + 5, pixelHeight = (sizeX + sizeY + sizeZ * 2) * 2 + 5; seq.Order.Sort(VoxelSeq.Side45[seq.Rotation]); for (int i = 0; i < len; i++) { byte v = seq.GetAtHollow(i); if (v != 0) { ulong xyz = seq.KeyAtRotatedHollow(i), x = VoxelSeq.ExtractX(xyz), y = VoxelSeq.ExtractY(xyz), z = VoxelSeq.ExtractZ(xyz), xPos = (sizeY - y + x) * 2 + 1, yPos = (z * 2 + sizeX + sizeY - x - y) * 2 + 1, dep = 3 * (x + y + z) + 256; renderer.DrawLeftTriangleLeftFace((int)xPos, (int)yPos, v, (int)dep, (int)x, (int)y, (int)z); renderer.DrawRightTriangleLeftFace((int)xPos, (int)yPos + 2, v, (int)dep, (int)x, (int)y, (int)z); renderer.DrawLeftTriangleRightFace((int)xPos + 2, (int)yPos + 2, v, (int)dep, (int)x, (int)y, (int)z); renderer.DrawRightTriangleRightFace((int)xPos + 2, (int)yPos, v, (int)dep, (int)x, (int)y, (int)z); //if (z >= sizeZ - 1 || seq.getRotated(x, y, z + 1) == 0) renderer.DrawLeftTriangleVerticalFace((int)xPos, (int)yPos + 4, v, (int)dep, (int)x, (int)y, (int)z); renderer.DrawRightTriangleVerticalFace((int)xPos + 2, (int)yPos + 4, v, (int)dep, (int)x, (int)y, (int)z); } } }