Platform SDK: DirectX

テクスチャ座標について

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

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

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 がピクセル カラーを得るために使用するメソッドを決める。詳細については、「テクスチャ フィルタリング」を参照すること。

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

壁の高さを半分にすると仮定する。このためには、小さな壁に合わせてテクスチャを歪めるか、Direct3D がテクスチャの下半分を使用するようにテクスチャ座標を割り当てることができる。

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

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

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