2010-09-05 63 views
3

我需要一些快速建議。OpenGL ES 2.0中元胞自動機的紋理格式

我想在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

創建第二個紋理並將其用作查找表。在紋理的每個256x256塊中,您可以表示一個布爾操作,其中輸入由行/列表示,輸出爲紋理值。實際上,在每個RGBA貼圖中,您可以表示每個256x256區域的四個布爾操作。不過,請注意紋理壓縮和MIP地圖!

+0

這聽起來像一個聰明的想法,謝謝。我會嘗試一下! – 2011-02-15 20:07:36