テクスチャー アドレッシング モード (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 列挙型の任意のメンバーを使用できます。テクスチャー ステージの現在のテクスチャー アドレス モードを取得するには、IDirect3DDevice9::GetSamplerState を呼び出して、D3DSAMPLERSTATETYPE 列挙型の D3DSAMP_ADDRESSU、3DSAMP_ADDRESSV、または D3DSAMP_ADDRESSW メンバーを使用して、情報が必要なアドレス モードを特定します。
デバイスの制限
一般に、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 までの範囲内にある必要があります。
テクスチャー アドレッシング モードの追加情報は次のトピックに含まれます。