我正在寻求并行化一些复杂的数学,而 WebGL 看起来是实现这一目标的完美方法。
问题是,您只能从纹理中读取 8 位整数。
理想情况下,我希望从纹理中获取 32 位数字。
我的想法是使用 4 个颜色通道来获得每像素 32 位,而不是 4 乘以 8 位。
我的问题是,GLSL 没有“%”运算符或任何按位运算符!
总括:
如何使用 glsl 中的运算符将 32 位数字转换为 4 个 8 位数字。
有关该技术的一些额外信息(使用按位运算符):
如何将一个 64 位整数存储在两个 32 位整数中并再次转换回来 https://stackoverflow.com/questions/2810280/how-to-store-a-64-bit-integer-in-2-32-bit-integers-and-convert-back-again
您可以通过乘以/除以二的幂来进行位移。
正如评论中指出的,我最初发布的方法有效但不正确,这是 Aras Pranckevičius 的一幅作品 http://aras-p.info/blog/2009/07/30/encoding-floats-to-rgba-the-final/,请注意,帖子中的源代码本身包含一个拼写错误,并且是 HLSL,这是一个已纠正拼写错误的 GLSL 端口:
const vec4 bitEnc = vec4(1.,255.,65025.,16581375.);
const vec4 bitDec = 1./bitEnc;
vec4 EncodeFloatRGBA (float v) {
vec4 enc = bitEnc * v;
enc = fract(enc);
enc -= enc.yzww * vec2(1./255., 0.).xxxy;
return enc;
}
float DecodeFloatRGBA (vec4 v) {
return dot(v, bitDec);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)