テクスチャ座標

テクスチャ座標

ほとんどのテクスチャは、ビットマップ同様、色値の 2 次元配列である。ただし、キューブ環境マップ テクスチャは除く。詳細については、「キューブ環境マップ」を参照すること。個々の色値は、テクスチャ要素またはテクセルと呼ばれる。各テクセルは、テクスチャ内の一意のアドレスを持つ。このアドレスは、それぞれ u と v で表される行と列の番号であると考えることができる。

テクスチャ座標はテクスチャ空間にある。つまり、テクスチャ座標は、テクスチャ内の (0,0) を基準にした相対位置に存在する。テクスチャを 3D 空間のプリミティブに適用するとき、そのテクセル アドレスをオブジェクト座標にマッピングしなければならない。その後、このアドレスをスクリーン座標、つまりピクセル位置に平行移動する必要がある。

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

Microsoft® Direct3D® は、テクスチャ空間のテクセルをスクリーン空間のピクセルに直接マッピングする。これにより、中間の手順が省略され、効率が高まる。このマッピング処理は、実際は逆マッピングである。つまり、スクリーン空間の各ピクセルについて、テクスチャ空間の対応するテクセル位置座標を計算する。このポイントまたはこの周囲でテクスチャ色がサンプリングされる。このサンプリング処理は、テクスチャ フィルタリングと呼ばれる。詳細については、「テクスチャ フィルタリング」を参照すること。

テクスチャの各テクセルは、テクセル座標で指定できる。しかし、テクセルをプリミティブにマッピングするためには、Direct3D は、すべてのテクスチャのすべてのテクセルに対して共通のアドレス範囲を必要とする。したがって、すべてのテクセル アドレスが 0.0 ~ 1.0 の範囲にある包括的アドレス指定スキームが使われる。2D 直交座標が x と y の座標で指定されるのと同様、Direct3D アプリケーションでは u と v の値でテクスチャ座標を指定する。実際には、0.0 ~ 1.0 の範囲外のテクスチャ座標を処理することも可能で、テクスチャ アドレシングで設定するパラメータを使ってこの処理を行う。詳細については、「テクスチャ アドレシング モード」を参照すること。

この結果、同一のテクスチャ アドレスを異なるテクスチャの異なるテクセルにマッピングできる。次の図では、テクスチャ アドレス (0.5,1.0) を使っている。しかし、これらのテクスチャはサイズが異なるため、テクスチャ アドレスは異なるテクセルにマッピングされる。左側のテクスチャ 1 は 5x5 である。テクスチャ アドレス (0.5,1.0) はテクセル (2,4) にマッピングされる。右側のテクスチャ 2 は 7x7 である。テクスチャ アドレス (0.5,1.0) はテクセル (3,6) にマッピングされる。

テクスチャ アドレシング

次の図は、簡単なテクセル マッピング処理を示している実際、これは非常に単純な例である。詳細については、「テクセルとピクセル間の直接マッピング」を参照すること。

色の正方形として理想化したピクセル

この例では、図の左側のピクセルを理想化した「色の正方形」で示す。このピクセルの 4 つの角のアドレスが、オブジェクト空間の 3D プリミティブにマッピングされる。ピクセルの形状は、3D 空間のプリミティブの形状と表示角度が原因で歪むことが多い。次に、ピクセルの角に対応する、プリミティブ上のサーフェイス領域の角を、テクスチャ空間にマッピングする。このマッピング処理によってピクセルの形状が再び歪むが、これが一般的である。ピクセルの最終的な色値は、ピクセルがマッピングされる領域のテクセルから計算する。テクスチャ フィルタリング メソッドを設定することによって、Direct3D がピクセル色を得るために使うメソッドを決める。詳細については、「テクスチャ フィルタリング」を参照すること。

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

テクスチャ マッピングした壁

壁の高さを 1/2 だけ小さくする場合は、小さな壁に合わせてテクスチャを歪めるか、Direct3D がテクスチャの下半分を使うようにテクスチャ座標を割り当てることができる。

小さな壁に合わせてテクスチャを歪めたり、スケーリングしたりする場合、使用するテクスチャ フィルタリング メソッドによって画質が変わる。詳細については、「テクスチャ フィルタリング」を参照すること。

Direct3D で小さな壁に対してテクスチャの下半分を使うようにテクスチャ座標を割り当てる場合、アプリケーションがこのプリミティブの頂点に割り当てるテクスチャ座標は、(0.0,0.5)、(1.0,0.5)、(1.0,1.0)、(0.0,1.0) になる。Direct3D はテクスチャの下半分を壁に適用する。

頂点のテクスチャ座標が 1.0 を超えていてもかまわない。0.0 ~ 1.0 の範囲外のテクスチャ座標を頂点に割り当てるときは、テクスチャ アドレシング モードも設定しなければならない。詳細については、「テクスチャ アドレシング モード」を参照すること。

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

テクスチャ座標は、テクスチャ ステージによってテクスチャに関連付けられる。テクスチャをテクスチャ ステージに関連付けるには SetTexture(stageIndex, pTexture) を使う。「IDirect3DDevice9::SetTexture」を参照すること。

柔軟な頂点フォーマット (FVF) コードでは、最大 8 セットのテクスチャ座標を定義できる。テクスチャ座標のデータは、ユーザーが頂点データで指定する。このデータは、ゼロから始まるインデックス 0 ~ 7 で参照される。最大 8 つのテクスチャ ブレンディング ステージが存在する。テクスチャを特定のステージに関連付けるには、SetTexture( stageIndex, pTexture) を使う。

テクスチャをステージに関連付けると、任意のテクスチャ座標をそのステージで使えるようになる。各座標のセットをステージに関連付けるには、SetTextureStageState( stageIndex, D3DTSS_TEXCOORDINDEX, textureCoordinateIndex ) を使う。「IDirect3DDevice9::SetTextureStageState」を参照すること。このように、ブレンディング ステージで任意のテクスチャやテクスチャ座標を使うように設定できる。複数のステージで同じテクスチャやテクスチャ座標を使うこともできる。

詳細については、以下のトピックを参照すること。