Microsoft DirectX 8.0 (C++) |
Microsoft® Direct3D® レンダリング デバイスでは、一度に 1 つのマテリアル プロパティのセットでレンダリングできる。
C++ アプリケーションの場合、システムで使用するマテリアル プロパティを設定するには、D3DMATERIAL8 構造体を用意し、次に IDirect3DDevice8::SetMaterial メソッドを呼び出す。
D3DMATERIAL8 構造体を用意するには、この構造体にプロパティ情報を設定して、レンダリングでの目的のエフェクトを作成する。次のコードは、シャープな白色のスペキュラ ハイライトがある、紫色のマテリアル用の D3DMATERIAL8 構造体を設定する。
D3DMATERIAL8 mat; // ディフューズ反射を表す RGBA を設定する。 mat.Diffuse.r = 0.5f; mat.Diffuse.g = 0.0f; mat.Diffuse.b = 0.5f; mat.Diffuse.a = 1.0f; // アンビエント反射を表す RGBA を設定する。 mat.Ambient.r = 0.5f; mat.Ambient.g = 0.0f; mat.Ambient.b = 0.5f; mat.Ambient.a = 1.0f; // スペキュラ ハイライトの色とシャープさを設定する。 mat.Specular.r = 1.0f; mat.Specular.g = 1.0f; mat.Specular.b = 1.0f; mat.Specular.a = 1.0f; mat.Power = 50.0f; // RGBA エミッション色を設定する。 mat.Emissive.r = 0.0f; mat.Emissive.g = 0.0f; mat.Emissive.b = 0.0f; mat.Emissive.a = 0.0f;
D3DMATERIAL8 構造体を用意したら、レンダリング デバイスの IDirect3DDevice8::SetMaterial メソッドを呼び出してこのプロパティを適用する。このメソッドには、用意した D3DMATERIAL8 構造体のアドレスを唯一のパラメータとして指定する。デバイスのマテリアル プロパティの更新が必要なときは、新しい情報で SetMaterial を呼び出すことができる。以上の処理を次のサンプル コードに示す。
// このコードでは、このトピックの前の例で変数 mat に対して定義した // マテリアル プロパティを使用する。pd3dDev は IDirect3DDevice8 インターフェイスへの // 有効なポインタであると仮定する。 HRESULT hr; hr = pd3dDev->SetMaterial(&mat); if(FAILED(hr)) { // エラー処理コード。 }
Direct3D デバイスを作成する場合は、以下の表に示すように現在のマテリアルは自動的にデフォルトに設定される。
メンバ | 値 |
---|---|
Diffuse | (R:1, G:1, B:1, A:0) |
Specular | (R:0, G:0, B:0, A:0) |
Ambient | (R:0, G:0, B:0, A:0) |
Emissive | (R:0, G:0, B:0, A:0) |
Power | (0.0) |