OpenGL ES 2.0中细胞自动机的纹理格式

3

我需要一些快速的建议。

我想在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位单元格状态。

1个回答

1
创建第二个贴图并将其用作查找表。在每个256x256的贴图块中,您可以表示一个布尔运算,其中输入由行/列表示,输出是纹理值。实际上,在每个RGBA纹理中,您可以表示每个256x256区域的四个布尔运算。但要注意纹理压缩和MIP映射!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接