10.「面はすべて同一のマテリアル設定」ではないモデルファイルの描画に対応する



09.で作成したモデルビューワは、モデルファイルの面はすべて同一のマテリアル設定としていました。
マテリアル設定が同一である面の集まりに対してグループというデータ構造を用意し、モデルはグループの集まりであるとするデータ構造を用意することで、「面はすべて同一のマテリアル設定」ではないモデルファイルの描画に対応します。

プロジェクトを開く

09.で作成したモデルビューワプロジェクトを開きます。

モデルに関するデータ構造の変更

ModelDataStructure.h に
マテリアルデータ構造の定義
グループデータ構造の定義
を追加し、
モデルデータ構造の定義に
グループ配列メンバ変数の宣言
グループ配列メンバ変数削除関数の定義
代入演算子の定義
デストラクタの定義
を追加します。



ビルドし、エラー、警告がないことを確認します。

ファイル読み込み処理の変更

データ構造の変更にあわせて、ファイル読み込み処理を、変更後のデータ構造に対応したものへ変更します。
LoadStlFile.cppのLoadStlFile関数に
"endsolid"時にグループデータを作成する処理
を追加します。



ビルドし、エラー、警告がないことを確認します。

描画処理の変更

データ構造の変更にあわせて、描画処理を、変更後のデータ構造に対応したものへ変更します。

ModelViewerRenderer.cpp のRenderScene関数の
mtrlFace.Ambient = D3DXCOLOR( 0.5, 0.5, 0.0, 1.0 );
mtrlFace.Diffuse = D3DXCOLOR( 0.5, 0.5, 0.0, 1.0 );
mtrlFace.Specular = D3DXCOLOR( 0.5, 0.5, 0.0, 1.0 );
をコメントアウトします。
面の描画処理に、グループごとにマテリアルを設定し直す処理を追加します。
面の描画処理のDrawIndexPrimitiveの引数をグループデータに対応した処理に変更します。



ビルドし、エラー、警告がないことを確認します。

実行

実行し、動作を確認します。

sphere.stlファイルの読み込み
(「メニュー/表示/描画」で、点、線を非描画にしています。)

ダウンロード

実行形式ファイルダウンロード (ModelViewerDirect3DWinAPI2008_10_exe.lzh)

ソースファイルダウンロード (ModelViewerDirect3DWinAPI2008_10_src.lzh)