Microsoft DirectX 8.0 (C++) |
シーンのジオメトリが初期化されたら、シーンをレンダリングする。テクスチャを持つオブジェクトをレンダリングするには、そのテクスチャが現在のテクスチャの 1 つとして設定されていなければならない。次のステップは、テクスチャ ステージ ステートの値を設定することである。テクスチャ ステージ ステートによって、テクスチャをレンダリングする動作を定義できる。たとえば、複数のテクスチャを 1 つにブレンディングすることができる。
Texture サンプル プロジェクトでは、まず、使用するテクスチャを設定する。次のサンプル コードでは、IDirect3DDevice8::SetTexture を使って、Microsoft® Direct3D® デバイスがレンダリングするテクスチャを設定している。
g_pd3dDevice->SetTexture( 0, g_pTexture );
SetTexture が受け取る最初のパラメータは、テクスチャを設定するステージ識別子である。1 つのデバイスで最大 8 つのテクスチャを持つため、最大値は 7 である。Texture サンプル プロジェクトでは 1 つだけテクスチャがあり、ステージ 0 に配置している。2 番目のパラメータは、テクスチャ オブジェクトへのポインタである。Texture サンプル プロジェクトでは、アプリケーション定義関数 InitGeometry で作成したテクスチャ オブジェクトを使用する。
次のサンプル コードでは、IDirect3DDevice8::SetTextureStageState メソッドを呼び出すことによって、テクスチャ ステージ ステートの値を設定している。
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE ); g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE ); g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE ); g_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
SetTextureState が受け取る最初のパラメータは、設定するステート変数のステージ インデックスである。このサンプル コードでは、ステージ 0 のテクスチャの値を変更するので、ここでは 0 を指定している。次のパラメータは、設定するテクスチャ ステートである。有効なすべてのテクスチャ ステートおよびその意味の一覧については、「D3DTEXTURESTAGESTATETYPE」を参照すること。次のパラメータは、テクスチャ ステートに設定する値である。ここに指定する値は、変更するテクスチャ ステージ ステートの値に基づいている。
各テクスチャ ステージ ステートに適切な値を設定すると、円柱をレンダリングすることができ、テクスチャがサーフェスに追加される。
テクスチャ座標のもう 1 つの使い方は、自動的にテクスチャ座標を生成する方法である。この方法では、テクスチャ座標インデックス (TCI) を使用する。TCI では、テクスチャ行列を使って、(x,y,z) TCI 座標を (tu, tv) テクスチャ座標にトランスフォームする。Texture サンプル プロジェクトでは、カメラ空間での頂点の位置座標を使って、テクスチャ座標を生成している。
最初のステップは、次のサンプル コードに示されているように、トランスフォームに使用する行列を作成することである。
D3DXMATRIX mat; mat._11 = 0.25f; mat._12 = 0.00f; mat._13 = 0.00f; mat._14 = 0.00f; mat._21 = 0.00f; mat._22 =-0.25f; mat._23 = 0.00f; mat._24 = 0.00f; mat._31 = 0.00f; mat._32 = 0.00f; mat._33 = 1.00f; mat._34 = 0.00f; mat._41 = 0.50f; mat._42 = 0.50f; mat._43 = 0.00f; mat._44 = 1.00f;
行列を作成したら、次のサンプル コードのように、IDirect3DDevice8::SetTransform を呼び出して設定しなければならない。
g_pd3dDevice->SetTransform( D3DTS_TEXTURE0, &mat );
D3DTS_TEXTURE0 フラグは、テクスチャ ステージ 0 のテクスチャにトランスフォームを適用するよう Direct3D に指示する。このサンプルの次のステップでは、目的の効果をだすために、さらにテクスチャ ステージ ステート値を設定する。この処理は、次のサンプル コードで行われる。
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2 ); g_pd3dDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION );
テクスチャ座標が設定されたので、シーンをレンダリングすることができる。円柱の座標は自動的に作成されることに注意すること。この設定では、ジオメトリ形状がレンダリングされた後、レンダリング画面にテクスチャを重ねるエフェクトが適用される。
テクスチャの詳細については、「テクスチャ」を参照すること。
このチュートリアルでは、サーフェスのテクスチャの使い方を示した。「チュートリアル 6 : メッシュの使い方」では、メッシュを含む複雑なジオメトリ形状の使用方法を示す。