我需要一些快速的建议。
我想在 GPU 上模拟一个元胞自动机(来自A Simple, Efficient Method for Realistic Animation of Clouds )。但是,我仅限于不支持任何位运算的 OpenGL ES 2.0 着色器(在 WebGL 中)。
由于此元胞自动机中的每个单元都代表一个布尔值,因此每个单元存储 1 位将是理想的。那么在 OpenGL 的纹理格式中表示这些数据的最有效方法是什么?有什么技巧还是我应该坚持使用直接的 RGBA 纹理?
编辑:这是我到目前为止的想法......
目前我正在考虑使用普通的 GL_RGBA8、GL_RGBA4 或 GL_RGB5_A1:
可能我可以选择 GL_RGBA8,并尝试使用浮点运算提取原始位。例如
x*255.0
,给出一个近似整数值。但是,提取单个位有点麻烦(即除以 2 并四舍五入几次)。我也对精度问题保持警惕。如果我选择 GL_RGBA4,我可以为每个组件存储 1.0 或 0.0,但我也可以尝试与之前使用 GL_RGBA8 相同的技巧。在这种情况下,它只是
x*15.0
. 不确定它是否会更快或看不到,因为提取位的操作应该更少,但每次纹理读取的信息更少。使用 GL_RGB5_A1 我可以尝试看看是否可以将我的单元格与一些附加信息打包在一起,例如每个体素的颜色,其中 alpha 通道存储 1 位单元格状态。