Microsoft DirectX 8.0 (Visual Basic) |
ジオメトリが初期化されたら、シーンをレンダリングする。テクスチャを持つオブジェクトをレンダリングするには、そのテクスチャが現在のテクスチャの 1 つとして設定されていなければならない。次のステップは、テクスチャ ステージ ステートの値を設定することである。テクスチャ ステージ ステートによって、テクスチャをレンダリングする動作を定義できる。たとえば、複数のテクスチャを 1 つにブレンディングすることができる。
Texture サンプル プロジェクトでは、まず、使用するテクスチャを設定する。次のコードでは、Direct3DDevice8.SetTexture を使って、Microsoft® Direct3D® デバイスがレンダリングするテクスチャを設定している。
g_D3DDevice.SetTexture 0, g_Texture
SetTexture が受け取る最初のパラメータは、テクスチャを設定するステージ識別子である。1 つのデバイスで最大 8 つのテクスチャを持つため、最大値は 7 である。このサンプルでは 1 つだけテクスチャがあり、ステージ 0 に配置している。2 番目のパラメータは、テクスチャ オブジェクトへのポインタである。このサンプルでは、アプリケーション定義関数 InitGeometry で作成したテクスチャ オブジェクトを使用する。
次のコードは、Direct3DDevice8.SetTextureStageState メソッドを呼び出して、テクスチャ ステージ ステートの値を設定する。
g_D3DDevice.SetTextureStageState 0, D3DTSS_COLOROP, D3DTOP_MODULATE g_D3DDevice.SetTextureStageState 0, D3DTSS_COLORARG1, D3DTA_TEXTURE g_D3DDevice.SetTextureStageState 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE g_D3DDevice.SetTextureStageState 0, D3DTSS_ALPHAOP, D3DTOP_DISABLE
SetTextureState が受け取る最初のパラメータは、設定するステート変数のステージ インデックスである。このサンプルでは、ステージ 0 のテクスチャの値を変更するので、ここでは 0 を指定している。次のパラメータは、設定するテクスチャ ステートである。有効なすべてのテクスチャ ステートおよびその意味の一覧については、「CONST_D3DTEXTURESTAGESTATETYPE」を参照すること。次のパラメータは、テクスチャ ステートに設定する値である。ここに指定する値は、変更するテクスチャ ステージ ステートの値に基づいている。
各テクスチャ ステージ ステートに適切な値を設定すると、円柱をレンダリングすることができ、テクスチャがサーフェスに追加される。
テクスチャ座標のもう 1 つの使い方は、自動的にテクスチャ座標を生成する方法である。この方法では、テクスチャ座標インデックス (TCI) を使用する。TCI では、テクスチャ行列を使って、(x,y,z) TCI 座標を (tu, tv) テクスチャ座標にトランスフォームする。Texture サンプル プロジェクトでは、カメラ空間での頂点の位置座標を使って、テクスチャ座標を生成している。
最初のステップは、トランスフォームに使用する行列を作成することである。行列を作成するコードを以下に示す。
Dim mat As D3DMATRIX mat.m11 = 0.25: mat.m12 = 0#: mat.m13 = 0#: mat.m14 = 0# mat.m21 = 0#: mat.m22 = -0.25: mat.m23 = 0#: mat.m24 = 0# mat.m31 = 0#: mat.m32 = 0#: mat.m33 = 1#: mat.m34 = 0# mat.m41 = 0.5: mat.m42 = 0.5: mat.m43 = 0#: mat.m44 = 1#
行列を作成したら、次のコードのように、SetTransform を呼び出して設定しなければならない。
g_D3DDevice.SetTransform D3DTS_TEXTURE0, mat
D3DTS_TEXTURE0 フラグは、テクスチャ ステージ 0 のテクスチャにトランスフォームを適用するよう Direct3D に指示する。このサンプルの次のステップでは、希望どおりの効果を出すために、さらにテクスチャ ステージ ステート値を設定する。この処理は、次のコードで行われる。
g_D3DDevice.SetTextureStageState 0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2 g_D3DDevice.SetTextureStageState 0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION
テクスチャ座標が設定されたので、シーンをレンダリングすることができる。円柱の座標は自動的に作成されることに注意すること。この設定では、ジオメトリ形状がレンダリングされた後、レンダリング画面にテクスチャを重ねるエフェクトが適用される。
テクスチャの詳細については、「テクスチャ」を参照すること。
このチュートリアルでは、サーフェスのテクスチャの使い方を示した。「チュートリアル 6 : メッシュの使い方」では、メッシュを含む複雑なジオメトリ形状の使用方法を示す。