我有一个用CG编写的RGBtoHSV代码来预览颜色变化,然后使用JS中的相同代码将其写入文件。
首先,我必须在H值上加0.33,才能在两个代码中得到几乎相同的结果。为什么我必须添加0.33,特别是?这对于显卡有什么不同的功能/舍入差异?
即使这样,66%的图片在两个代码上都有完全相同的颜色,33%的颜色是不同的。我不明白为什么?如果我取出3 if条件,则代码具有相同的结果,而无需在任何地方添加0.33。
答案 0 :(得分:1)
与fract相比,我认为唯一可能出现问题的是Javascript中%运算符对负数的不同行为。
你应该用fract(x)= x - Math.floor(x)代替它:
HSV.x = HSV.x/6;
HSV.x -= Math.floor(HSV.x);
答案 1 :(得分:1)
Delta.xyz -= Delta.zxy;
不同于:
Delta.x -= del.z;
Delta.y -= del.x;
Delta.z -= del.y;
因为CG版本在一个版本中完成,而JS版本会覆盖自己。它应该是:
var del = Delta;
Delta.x -= del.z;
Delta.y -= del.x;
Delta.z -= del.y;
我无法相信我读了那条线超过20次,从未发现这是错误。