3

簡単なアドバイスが必要です。

GPUでセルオートマトン(雲のリアルなアニメーションのためのシンプルで効率的な方法から)をシミュレートしたいと思います。ただし、ビット単位の操作をサポートしない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を使用して、アルファチャネルが1ビットセルの状態を格納するボクセルごとの色などの追加情報とともにセルをパックできるかどうかを試してみることができます。

4

1 に答える 1

1

2番目のテクスチャを作成し、ルックアップテーブルとして使用します。テクスチャの各256x256ブロックで、入力が行/列で表され、出力がテクスチャ値である1つのブール演算を表すことができます。実際、各RGBAテクスチャでは、256x256領域ごとに4つのブール演算を表すことができます。ただし、テクスチャ圧縮とMIPマップには注意してください。

于 2010-10-20T18:31:46.560 に答える