次の方法で共有


テクスチャー座標 (Direct3D 9)

ビットマップのように、ほとんどのテクスチャーはカラー値の 2 次元配列です。ただし、キューブ環境マップのテクスチャーは例外です。詳細については、「キューブ環境マッピング (Direct3D 9)」を参照してください。個々のカラー値はテクスチャー要素、つまりテクセルと呼ばれます。各テクセルはテクスチャーに固有のアドレスを持ちます。アドレスは列と行の数とみなすことができます。列と行はそれぞれ u と v というラベルが付けられます。

Ee422492.uvcoordinates(ja-jp,VS.85).jpg

テクスチャー座標はテクスチャー空間にあります。つまり、テクスチャー座標はテクスチャー内の位置 (0,0) を基準とします。テクスチャーを 3D 空間のプリミティブに適用する場合は、そのテクセル アドレスをオブジェクト座標にマッピングする必要があります。次に、スクリーン座標またはピクセル位置に変換する必要があります。

スクリーン空間へのテクセルのマッピング

Direct3D では、効率性を高めるために、テクスチャー空間のテクセルをスクリーン空間のピクセルに直接マッピングし、中間のステップはスキップします。このマッピング処理は、実際には逆マッピングです。つまり、スクリーン空間のピクセルごとに、テクスチャー空間の対応するテクセル位置が計算されます。そのポイントの、または周囲のテクスチャー カラーがサンプリングされます。このサンプリング プロセスは、テクスチャー フィルターリングと呼ばれます。詳細については、「テクスチャー フィルタリング (Direct3D 9)」を参照してください。

テクスチャー内の各テクスチャーはそのテクセル座標で指定できます。ただし、テクセルをプリミティブにマッピングするために、Direct3D はすべてのテクスチャー内のすべてのテクセルに対して均一のアドレス範囲を必要とします。したがって、すべてのテクセル アドレスが 0.0 から 1.0 の範囲にある一般的なアドレッシング スキームが採用されています。Direct3D アプリケーションは、2D デカルト座標が x 座標と y 座標という用語で指定されるのと同じように、テクスチャー座標を u 値と v 値という用語で指定します。技術的には、システムは実際には 0.0 と1.0 の範囲外のテクスチャー座標を処理でき、これはテクスチャー アドレッシングに設定されたパラメーターを使用して実行されます。詳細については、「テクスチャー アドレッシング モード (Direct3D 9)」を参照してください。

この結果として、まったく同じテクスチャー アドレスを、各種テクスチャーの異なるテクセル座標にマッピングできます。次の図では、使用されているテクスチャー アドレスは (0.5,1.0) です。ただし、テクスチャーのサイズはさまざまであるため、テクスチャー アドレスはさまざまなテクセルにマッピングします。左側のテクスチャー 1 は 5x5 です。テクスチャー アドレス (0.5,1.0) はテクセル (2,4) にマッピングします。右側のテクスチャー 2 は 7x7 です。テクスチャー アドレス (0.5,1.0) はテクセル (3.6) にマッピングします。

Texture addressing

テクセル マッピング プロセスの簡易版を次の図に示します。ご覧のとおり、この例は極めて単純です。詳細については、「テクセルからピクセルへの直接的なマッピング (Direct3D 9)」を参照してください。

Pixel idealized into a square of color

この例では、図の左側に示されたピクセルは四角のカラーにうまく収まっています。ピクセルの 4 つの角のアドレスは、オブジェクト空間の 3D プリミティブにマッピングされています。3D 空間のプリミティブの形状や表示角度が原因で、ピクセルの形状が歪むことはよくあります。ピクセルの四隅に対応するプリミティブ上のサーフェス領域の角は、テクスチャー空間にマッピングされます。マッピング プロセスでは、ピクセルの形状が再び歪みますが、これは一般的なことです。ピクセルの最終的なカラー値は、ピクセルのマッピング先の領域にあるテクセルから計算されます。テクスチャー フィルターリング メソッドを設定する場合は、Direct3D がピクセル カラーになるように使用するメソッドを決定する必要があります。詳細については、「テクスチャー フィルタリング (Direct3D 9)」を参照してください。

アプリケーションは、テクスチャー座標を頂点に直接割り当てることができます。この機能では、テクスチャーのどの部分をプリミティブにマッピングするかを制御できます。たとえば、以下の図のテクスチャーとまったく同じサイズの矩形プリミティブを作成するとします。この例では、アプリケーションにテクスチャー全体を壁全体にマッピングさせることにします。アプリケーションがプリミティブの頂点に割り当てるテクスチャー座標は、(0.0,0.0)、(1.0,0.0)、(1.0,1.0)、および (0.0,1.0) です。

Texture-mapped wall

壁の高さを 2 分の 1 増やすことにした場合、狭い壁に合わせてテクスチャーを歪めるか、Direct3D にテクスチャーの下半分を使用させるテクスチャー座標を割り当てることができます。

狭い壁に合わせてテクスチャーを歪めるまたは拡大縮小する場合は、使用するテクスチャー フィルターリング メソッドによってイメージ品質が変わってきます。詳細については、「テクスチャー フィルタリング (Direct3D 9)」を参照してください。

代わりに、狭い壁にテクスチャーの下半分が使用されるようにするために、テクスチャー座標を割り当てる場合、アプリケーションがこ例のプリミティブの頂点に割り当てるテクスチャー座標は、(0.0,0.5)、(1.0,0.5)、(1.0,1.0)、および (0.0,1.0) となります。Direct3D はテクスチャーの下半分を壁に適用します。

頂点のテクスチャー座標が 1.0 を上回る可能性があります。0.0 から 1.0 の範囲にない頂点にテクスチャー座標を割り当てる場合は、テクスチャー アドレッシング モードも設定する必要があります。詳細については、「テクスチャー アドレッシング モード (Direct3D 9)」を参照してください。

テクスチャー座標とテクスチャー ステージ

テクスチャー座標は、テクスチャー ステージ経由でテクスチャーに関連付けられます。テクスチャーは SetTexture(stageIndex、pTexture) によってテクスチャー ステージに割り当てられます。「IDirect3DDevice9::SetTexture」を参照してください。

フレキシブル頂点フォーマット (FVF) のコードでは、最大 8 組のテクスチャー座標を定義できます。テクスチャー座標のデータは、頂点データとしてユーザーが指定します。データはゼロ ベースのインデックス (0 ~7) で示されます。0 - 7. テクスチャー ブレンディング ステージは最大 8 つあります。テクスチャーは SetTexture(stageIndex、pTexture) を使用して特定のステージに割り当てられます。

これをいったん実行すると、あらゆるテクスチャー座標セットを、どのステージでも使用できます。各座標セットは、 SetTextureStageState(stageIndex、D3DTSS_TEXCOORDINDEX、textureCoordinateIndex ) を使用してステージに関連付けられます。「IDirect3DDevice9::SetTextureStageState」を参照してください。このように、あらゆるテクスチャーとあらゆるテクスチャー座標を使用するようにブレンディング ステージを設定することができます。複数のステージで同じテクスチャー、またはテクスチャー座標を使用できます。

追加情報は次のトピックに含まれます。