You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GeoGebra/Excel与GLSL着色器计算结果不一致问题排查

问题原因分析

你的GLSL代码中,当x * subdivision落在[i, i+0.5)区间时,(x - i - 0.5) * 2.0的结果为负数。虽然从数学逻辑上,负数的偶次幂应为正数,但部分GPU的GLSL实现对负数底数的pow函数处理存在兼容性问题——即便指数是整数,也可能返回NaN(非数值),导致对应区间的alpha值无效(通常会被渲染为透明或0),这就是只有[i+0.5, i+1)区间(此时底数为正)有渐变效果的核心原因。

而GeoGebra和Excel对负数的整数次幂处理严格遵循数学规则,所以能得到符合预期的V型曲线。

修复方案

只需对pow的底数取绝对值,确保传入参数始终为非负数,就能让所有区间的渐变效果正常显示:

float a(float x) {
    // subdivision = 4 and sizeRatio = 1
    x = x * subdivision;
    float i = floor(x); // 正数场景下和int(x)效果一致,语义更明确
    float base = abs((x - i - 0.5) * 2.0);
    return pow(base, 6.0 / sizeRatio) / 5;
}

额外补充:你提到预期函数在每个整数区间内“先递增到1再递减”,但当前公式(包括Excel中的)实际是先递减到0再递增到1的V型曲线。如果要实现先增后减的倒V型,可将返回值调整为1.0 - pow(base, 6.0 / sizeRatio)/5(可根据需求调整系数)。

内容的提问来源于stack exchange,提问作者user19013678

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 14:05:17