次の方法で共有


テクスチャ アドレッシング モード (Direct3D 9)

Direct3D アプリケーションは、任意のプリミティブの頂点テクスチャ座標を割り当てることができます。 詳細については、「 テクスチャ座標 (Direct3D 9)」を参照してください。 通常、頂点に割り当てるテクスチャ座標 (u, v) は 0.0 ~ 1.0 (両端含む) の範囲です。 ただし、その範囲外のテクスチャ座標を割り当てることで、テクスチャリングの特殊効果を作成できます。

テクスチャのアドレス指定モードを設定すると、[0.0, 1.0] の範囲外にあるテクスチャ座標で Direct3D が実行することを制御できます。 たとえば、テクスチャがプリミティブ全体でタイル化されるようにアプリケーションにテクスチャのアドレス指定モードを設定させることができます。

Direct3D では、アプリケーションでテクスチャの折り返しを実行できます。 テクスチャ アドレッシング モードを D3DTADDRESS_WRAP に設定することは、テクスチャ ラップの実行と同じではないことに注意してください。 テクスチャ アドレッシング モードをD3DTADDRESS_WRAPに設定すると、ソース テクスチャの複数のコピーが現在のプリミティブに適用され、テクスチャ ラップを有効にすると、システムがテクスチャ化されたポリゴンをラスター化する方法が変わります。 詳細については、「 テクスチャ ラッピング (Direct3D 9)」を参照してください。

テクスチャの折り返しを有効にすると、[0.0, 1.0] の範囲外のテクスチャ座標は無効になり、その場合は延滞テクスチャ座標などのラスター化の動作は未定義になります。 テクスチャの折り返しを有効にすると、テクスチャのアドレス指定モードは使用されません。 テクスチャの折り返しが有効なときは、アプリケーションで 0.0 未満または 1.0 を上回るテクスチャ座標を指定しないように気をつけてください。

アドレス指定モードの設定

IDirect3DDevice9::SetSamplerState メソッドを呼び出すことで、個々のテクスチャ ステージのテクスチャ アドレッシング モードを設定できます。 Sampler パラメーターに目的のテクスチャ ステージ識別子を指定します。 Type パラメーターを D3DSAMP_ADDRESSU、D3DSAMP_ADDRESSV、または D3DSAMP_ADDRESSW 値に設定して、u-、v-、または w アドレス指定モードを個別に更新します。 Value パラメーターは、設定するモードを決定します。 D3DTEXTUREADDRESS 列挙型の任意のメンバーを指定できます。 テクスチャ ステージの現在のテクスチャ アドレス モードを取得するには、D3DSAMPLERSTATETYPE 列挙の D3DSAMP_ADDRESSU、D3DSAMP_ADDRESSV、または D3DSAMP_ADDRESSW メンバーを使用して IDirect3DDevice9::GetSamplerState を呼び出して、情報が必要なアドレス モードを識別します。

デバイスの制限事項

一般に、0.0 ~ 1.0 の範囲外のテクスチャ座標も許可されますが、その範囲からテクスチャ座標がどの程度はずれることが可能かは、ほとんどがハードウェアの制限によって変わってきます。 レンダリング デバイスは、デバイス機能を取得するときに、D3DCAPS9 構造体の MaxTextureRepeat メンバーでこの制限を伝えます。 このメンバーの値は、デバイスで許可されるテクスチャ座標の全範囲を表します。 たとえば、この値が 128 の場合、入力テクスチャ座標は -128.0 ~ +128.0 の範囲を保つ必要があります。 この範囲外のテクスチャ座標を持つ頂点を渡すことは無効です。 同じ制限は、自動的なテクスチャ座標生成とテクスチャ座標変換の結果として生成されるテクスチャ座標にも適用されます。

MaxTextureRepeat の解釈も、D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE機能ビットの影響を受けています。 このビットを設定すると、 MaxTextureRepeat メンバーの値が説明どおりに正確に使用されます。 ただし、D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZEが設定されていない場合、テクスチャの繰り返しの制限は、テクスチャ座標によってインデックス付けされるテクスチャのサイズによって異なります。 この場合、有効なテクスチャ座標範囲を計算するには、 MaxTextureRepeat を現在のテクスチャ サイズで最大詳細レベルでスケーリングする必要があります。 たとえば、テクスチャの寸法が 32 で MaxTextureRepeat が 512 の場合、実際の有効なテクスチャ座標範囲は 512/32 = 16 であるため、このデバイスのテクスチャ座標は -16.0 から +16.0 の範囲内である必要があります。

テクスチャ アドレッシング モードの詳細については、次のトピックを参照してください。

基本的なテクスチャリングの概念