背景
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
那么不奇怪了,除法都出问题了,取余这么改当时也没用了~
片尾
先不公布我的解决方案,先看看能不能等到大家的想法和尝试~= ̄ω ̄=
网友评论