我正在使用 OpenGL ES 3.0 在 GPU 上创建流体动力学效果。使用 16 位浮点 FBO 我可以使效果正常工作。
我的问题是我的目标是不支持浮点纹理的 GPU。由于缺乏精确性,效果会崩溃。
这种效果只是二维的,所以我只读取和写入 FBO 的前 2 个通道。所以,我想知道是否有人成功地使用了 unsigned int 纹理的两个通道来增加额外的精度,以及这如何可能。
我目前的解决方案如下(GLSL 片段着色器片段),它根本不能正常工作:
#define read(vec) ((((vec).xy * 255.0) - 127.0) / 127.0) + (vec).zw / 255.0
vec4 write(vec2 vec)
{
vec2 temp = ((vec * 127.0) + 127.0);
vec2 a = floor(temp) / 255.0;
vec2 b = mod(temp, 255.0);
return vec4(a,b);
}
我认为主要问题可能是这样的任何方案都不可能写为零。
我希望有人已经解决了这个问题,或者可以看到此类问题的解决方案:)