我正在使用以下POV-Ray循环在其他颜色空间中绘制sRGB坐标。循环仅沿外表面生成点,然后将它们与三角形连接。由于sRGB空间是一种扭曲的立方体,这意味着6个外表面和8个顶点。
#macro cie_calc_gamut_xyz_srgb()
#for (i, 0, cie_sample_count_srgb)
#for (j, 0, cie_sample_count_srgb)
// side 0 & 3
#local cooRGB = <i/cie_sample_count_srgb,j/cie_sample_count_srgb,0>;
#local cooXYZ = cie_convRGB2XYZ(cooRGB);
#declare cie_point_array_srgb[0][i][j] = cooXYZ;
#local cooRGB = <i/cie_sample_count_srgb,j/cie_sample_count_srgb,1>;
#local cooXYZ = cie_convRGB2XYZ(cooRGB);
#declare cie_point_array_srgb[3][i][j] = cooXYZ;
// side 1 & 4
#local cooRGB = <i/cie_sample_count_srgb,0,j/cie_sample_count_srgb>;
#local cooXYZ = cie_convRGB2XYZ(cooRGB);
#declare cie_point_array_srgb[1][i][j] = cooXYZ;
#local cooRGB = <i/cie_sample_count_srgb,1,j/cie_sample_count_srgb>;
#local cooXYZ = cie_convRGB2XYZ(cooRGB);
#declare cie_point_array_srgb[4][i][j] = cooXYZ;
// side 2 & 5
#local cooRGB = <0,i/cie_sample_count_srgb,j/cie_sample_count_srgb>;
#local cooXYZ = cie_convRGB2XYZ(cooRGB);
#declare cie_point_array_srgb[2][i][j] = cooXYZ;
#local cooRGB = <1,i/cie_sample_count_srgb,j/cie_sample_count_srgb>;
#local cooXYZ = cie_convRGB2XYZ(cooRGB);
#declare cie_point_array_srgb[5][i][j] = cooXYZ;
#end
#end
#end
这很有效,因为几乎所有的色彩空间都是三维的。以下是输出的示例:
但是,我想对CMYK色彩空间做同样的事情。我遇到的问题是它有4个参数而不是3.再次,我只想绘制最外层表面上的点并用三角形连接它们。我不认为最终的颜色是四维的,但我完全不知道如何继续。有没有人知道该怎么办?感谢。
请注意,XYZ是一个色彩空间。 Link
答案 0 :(得分:1)
这里的主要问题是CMYK不是一个合适的色彩空间 - 它更像是一个印刷过程,你在坐标上有一个额外的自由度,可以将所有颜色都映射到可见颜色。使用K与100%CMY不同的是使用无法在成像软件中模拟的着色剂的化学特性。 (我试图在谷歌上找到一个关于CMYK不是色彩空间的好参考 - 尝试一下,你会看到科学支持的文本倾向于将CMYK称为“颜色模型”而不是)
无论如何,有4个坐标渲染无效的大多数处理颜色的已知成像算法,这是GIMP从未考虑过的主要原因,从未考虑过具有内部CMYK颜色空间。 (可以导出到这个空间,但不能正常工作)。
总而言之,您应该做的是采用固定的K值,并使用不同的CMY渲染您的立方体。如果需要,重复多余的立方体。