小编DDR*_*DDR的帖子

在WebGL着色器中获取准确的整数模数

我想获得的准确模xy在WebGL的片段着色器.x并且y是整数.

图形化mod(x,y),我们得到以下内容: 一张不稳定,不规则的图表

用于生成红黑矩形的实际代码是:

gl_FragColor = vec4(mod(
  float(int(v_texCoord[0]*15.))/15.,
  float(int(v_texCoord[1]*15.))/15.
), 0, 0, 1);
Run Code Online (Sandbox Code Playgroud)

其中v_texCoord是vec2,范围从0,0左上角到1,1右下角.精度设置为浮动和整数的mediump.

阅读图表,我们看到虽然mod(6,6)是正确的0,但mod(7,7)实际上7!我该如何解决?

我试图实现自己的mod()函数.但是,它具有相同的错误,并生成相同的图形.

int func_mod(int x, int y) {
    return int(float(x)-float(y)*floor(float(x)/float(y)));
}
Run Code Online (Sandbox Code Playgroud)

在Javascript中,我可以调试它,该功能完美运行.然后我尝试了一种迭代方法,因为我担心我会疯狂,而且我不相信浮点除法.

int iter_mod(int x, int y) {
    x = int(abs(float(x))); y = int(abs(float(y)));
    for(int i=0; i>-1; i++) {
        if(x < y) break;
        x = x - y;
    }
    return x;
}
Run Code Online (Sandbox Code Playgroud)

这工作,但我无法绘制它,因为当我尝试时,它在环0中的错误崩溃了.它适用于我需要它的spritesheet计算,但我真的觉得这是一个不正确的解决方案.

(更新:它在我的手机上完美运行.现在不是我的代码错误,这只是我的问题...)

shader webgl fragment-shader

5
推荐指数
2
解决办法
5786
查看次数

标签 统计

fragment-shader ×1

shader ×1

webgl ×1