[GLSL] 整数除法误差

背景

GL版本: OpenGL ES 2.0
代码端: Shader GLSL

前言

当你遇到下面这种情况时,人生,可能是绝望的~

int   slot    = ...; // 网格序号,如90
float colSize = ...; // 网格列数,如30.0
float rowSize = ...; // 网格行数,如4.0
int   column  = int(mod(float(slot), colSize));
int   row     = int(float(slot) / colSize);

// 此时,神奇的事情发生了
// column = 30;
// row    = 2;
你特么在逗我吗!??

正片

除法除不对就算了,取余也取不对?
好吧,咱一个一个来

除法·改

因为GLSL中不支持隐式类型转换,所以只能同种类型做运算,如float / float或者int / int

// Plan A
int row = slot / int(colSize);
// 结果是: 2
// Plan B
float row = float(slot) / colSize;
// 结果是: 2.0
What...What the hell?
取余·改
// Plan A
int column = int(float(slot) - colSize * floor(float(slot) / colSize));
// 结果是: 30
// Plan A
int column = slot - int(colSize) * (slot / int(colSize));
// 结果是: 30

那么不奇怪了,除法都出问题了,取余这么改当时也没用了~


片尾

先不公布我的解决方案,先看看能不能等到大家的想法和尝试~= ̄ω ̄=

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容