0

私は最近、OpenGL で 3D テクスチャを扱っています。3D テクスチャを扱うときは、 texture3d() をたくさん使わなければならないことに気付きました。これはほとんどGPUキラーです。glsl に 3D テクスチャの VOLUME をサンプリングできる関数はありますか? したがって、texture3D() を 32768 回呼び出す代わりに、次のようなことができます。

texture3DVolume(3dtexture, vec3(0.5, 0.5, 0.5), vec3(0.2, 0.2, 0.2));

どのサンプルが 0.5 0.5 0.5、ボリュームが 0.2 0.2 0.2 であるか。

4

1 に答える 1

0

いいえ : これには、自分で気づいたように、すべてのボリュームをサンプリングする必要があります。

2D では、合計面積テーブルを使用できます。これにより、「ボックス」内のマトリックスのすべての値の合計を 4 つのサンプルのみで計算できます。コンセプトは簡単に 3D に拡張できると思います。

かなり高価な前処理ステップがあることに注意してください。平均と合計のみを取得でき、幾何平均や中央値などの他の凝ったものは使用できません。

異なるユースケースに関する AMD からの説明を次に示します

mipmaps を使用することもできると思います: 2x2x2 ボリュームをサンプリングするには、最初のミップマップをサンプリングします... しかし、これは任意のサンプルの場所ではそのままでは機能しません。

于 2012-09-27T08:09:47.307 に答える