geogebra 的结果和我的着色器上的结果不一样

问题描述 投票:0回答:1

我不知道这种问题是否适合堆栈溢出,但它是:

我有这个小代码,可以计算给定 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 之后减少,对于每个整数都是如此。 enter image description here

甚至在 Excel 中使用我在 glsl 代码中使用的相同公式: enter image description here

所以,当我运行着色器时,我希望有一个双渐变。问题是,我只有一个梯度,0.5 到 1 之间的梯度,1.0 到 1.5 之间的梯度等等都没有。

enter image description here

我找不到我的错误在哪里。有什么想法吗?

我希望我说清楚了。谢谢

glsl shader alpha
1个回答
0
投票

区别在于 GLSL 的

pow
函数。来自GLSL 330规范

genType pow (genType x, genType y)

如果 x < 0.

,结果未定义

当 x 的小数部分小于 0.5 时,这正是

x - int(x) - 0.5 * 2.0
中 x 所发生的情况。

© www.soinside.com 2019 - 2024. All rights reserved.