// REFERENCE: ConvertColor.dll
using ConvertColor;
using System.IO;
def δ = 4;
def vertexCount = 6 * (256 / δ + 1) * (256 / δ + 1);
def faceCount = 6 * (256 / δ) * (256 / δ);
def writer = File.CreateText("lab.ply");
[ "ply"
, "format ascii 1.0"
, "comment Created by Alexey Badalov"
, $"element vertex $vertexCount"
, "property float x"
, "property float y"
, "property float z"
, "property float red"
, "property float green"
, "property float blue"
, $"element face $faceCount"
, "property list uchar uint vertex_indices"
, "end_header"
].Iter(writer.WriteLine);
def ProcessSide(WriteVertex : double * double -> void)
{
foreach (b in [0, δ .. 256])
foreach (a in [0, δ .. 256])
WriteVertex(a / 256.0, b / 256.0);
}
def WriteVertex(r, g, b)
{
def (x, y, z) = (r, g, b) |> RgbToXyz |> XyzToLab;
def x = x / 50.0;
def y = y / 50.0;
def z = z / 50.0;
writer.WriteLine(string.Join(" ", array[x, y, z, r, g, b]))
}
ProcessSide(WriteVertex(0, _, _));
ProcessSide(WriteVertex(1, _, _));
ProcessSide(WriteVertex(_, 0, _));
ProcessSide(WriteVertex(_, 1, _));
ProcessSide(WriteVertex(_, _, 0));
ProcessSide(WriteVertex(_, _, 1));
foreach (k in [0 .. 5])
foreach (b in [0 .. 256 / δ - 1])
foreach (a in [0 .. 256 / δ - 1])
{
def offset = k * (256 / δ + 1) * (256 / δ + 1);
def v0 = offset + (b + 0) * (256 / δ + 1) + a + 0;
def v1 = offset + (b + 1) * (256 / δ + 1) + a + 0;
def v2 = offset + (b + 1) * (256 / δ + 1) + a + 1;
def v3 = offset + (b + 0) * (256 / δ + 1) + a + 1;
writer.WriteLine("4 {0} {1} {2} {3}", v0, v1, v2, v3)
}
writer.Close();
Comments
0 B
|👍
/👎