Microsoft DirectX 8.0 (Visual Basic)

ステップ 3 : シーンのレンダリング

ジオメトリが初期化されたら、シーンをレンダリングする。テクスチャを持つオブジェクトをレンダリングするには、そのテクスチャが現在のテクスチャの 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 : メッシュの使い方」では、メッシュを含む複雑なジオメトリ形状の使用方法を示す。