3Dテクスチャの場合、
3 次元テクスチャの場合、z インデックスは 3 次元を指します。これは正確にはどういう意味ですか?
2 次元配列テクスチャの場合、z インデックスはスライス インデックスを参照します。4 層の 2D テクスチャがある場合、z=2 の場合、2 番目の 2D テクスチャ スライスを参照します。
GL_TEXTURE_3D と GL_TEXTURE_2D_ARRAY をターゲットにすると、テクスチャ座標間の違いを除いて、どのような違いがあるのでしょうか?
3 次元テクスチャの場合、z インデックスは 3 次元を指します。これは正確にはどういう意味ですか?
あなたがそれを意味したいものは何でも。
テクスチャはルックアップ テーブルにすぎません。このルックアップ テーブルのインデックスは、テクスチャ座標と呼ばれます。テクスチャ座標が何を意味するかは、それをどのように使用するかによって完全に異なります。それは宇宙の位置かもしれません。3 次元の関数の XYZ である可能性があります。それは多くのことかもしれません。
テクスチャを絵だと考えるのはやめましょう。
2D テクスチャでは、テクスチャ座標の S および T コンポーネントは、テクスチャの X 軸および Y 軸に沿ってアクセスする距離を表します。S が 1 の場合、右辺を意味します。S が 0 の場合、左辺を意味します。などなど。
同じことが 3D テクスチャと STP 座標にも当てはまります。P が 0 の場合、3D テクスチャの「最も遠い」深さを意味します。P が 1 の場合、「最も近い」深さを意味します。
アップロードするデータに関しては、常に右手座標系に基づいて機能します。つまり、下/左/奥が (0, 0, 0) ポイントで、上/右/前が (1, 1, 1) ポイントです。データで提供する最初の深度レイヤーは、最も遠い深度レイヤーであり、次のレイヤーは 2 番目に遠いレイヤーです。
2 次元配列テクスチャの場合、z インデックスはスライス インデックスを参照します。4 層の 2D テクスチャがある場合、z=2 の場合、2 番目の 2D テクスチャ スライスを参照します。
いいえ、それは3 番目を参照します。C/C++ の他のすべてと同様に、0 から始まるインデックス。
GL_TEXTURE_3D と GL_TEXTURE_2D_ARRAY をターゲットにすると、テクスチャ座標間の違いを除いて、どのような違いがあるのでしょうか?
2D 配列のレイヤー間のフィルタリングはありません。3D テクスチャで GL_LINEAR とともに GL_TEXTURE_MAG_FILTER を使用すると、8 つのテクセルから値がサンプリングされ、3 方向すべてに補間されます。2D 配列でこれを行うと、サンプリングする特定の Z レイヤーが選択され、そのレイヤー内の 4 つのテクセルが選択されて補間されます。
ミップマップの動作は異なります。3D テクスチャには 3D 画像が含まれます。したがって、各ミップマップも 3D です。したがって、ミップマップ削減は 3 次元で機能します。ベース レイヤーが 32x32x32 の場合、次のミップマップは 16x16x16 になります。
2D 配列テクスチャには2D イメージが含まれます。それらには 2D 画像の配列が含まれていますが、それは実装の詳細です。単なる 2D 画像のコレクションです。各 2D イメージには独自のミップマップがありますが、これらは2D ミップマップです。したがって、2D 配列テクスチャの各ミップマップは、他のすべてと同じ数の画像を使用します。したがって、2D 配列のベース レイヤーが 32x32 の 2D 画像を使用し、これらの画像が 32 個ある場合、次のミップマップ レイヤーは 16x16 の 2D 画像を使用しますが、それでも 32 個あります。
配列テクスチャは、テクスチャ座標の 3 番目のコンポーネント (取得元の配列レイヤー) に整数値を使用します。3D テクスチャは、3 つのコンポーネントすべてに正規化された値を使用します。
つまり、データをアップロードするために使用する機能を除いて、それらには共通点がまったくありません。
テクスチャに関する OpenGL wiki のさまざまなページを参照して、詳細を確認してください。
3Dテクスチャは3次元すべてで補間できますが、テクスチャの2Dアレイは、スライス全体ではなく、2つの画像次元でのみ補間します。