相同的代码在CG和JS中表现不同?

时间:2014-08-20 00:57:49

标签: glsl gpu cg hsv

我有一个用CG编写的RGBtoHSV代码来预览颜色变化,然后使用JS中的相同代码将其写入文件。

首先,我必须在H值上加0.33,才能在两个代码中得到几乎相同的结果。为什么我必须添加0.33,特别是?这对于显卡有什么不同的功能/舍入差异?

即使这样,66%的图片在两个代码上都有完全相同的颜色,33%的颜色是不同的。我不明白为什么?

如果我取出3 if条件,则代码具有相同的结果,而无需在任何地方添加0.33。

enter image description here enter image description here

2 个答案:

答案 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次,从未发现这是错误。