我不知道这种问题是否适合堆栈溢出,但它是:
我有这个小代码,可以计算给定 x 的 alpha。这很简单:
float a(float x) {
// subdivision = 4 and sizeRatio = 1
x = x * subdivision;
float i = int(x);
return pow((x - i - 0.5) * 2.0, 6.0 / sizeRatio)/5;
}
因为没有那么复杂,我可以在geogebra中可视化预期的结果。正如我想要的那样,它增加直到 1,然后在 1 之后减少,对于每个整数都是如此。
甚至在 Excel 中使用我在 glsl 代码中使用的相同公式:
所以,当我运行着色器时,我希望有一个双渐变。问题是,我只有一个梯度,0.5 到 1 之间的梯度,1.0 到 1.5 之间的梯度等等都没有。
我找不到我的错误在哪里。有什么想法吗?
我希望我说清楚了。谢谢
区别在于 GLSL 的
pow
函数。来自GLSL 330规范:
genType pow (genType x, genType y)
如果 x < 0.
,结果未定义
当 x 的小数部分小于 0.5 时,这正是
x - int(x) - 0.5 * 2.0
中 x 所发生的情况。