Mission5: テクスチャの生成と破棄。


【ステップ1】

 今度は、Mission4 の続きである。
 典型的(と思われる)敵キャラ制作を行ってみる。
 現状はプログラムの簡易さに主眼を置いているので、
 今後の mission で本格的な改造が必要になるであろう。

 まぁとりあえず始めよう。
 VisualC++ の画面は、以下のようになっているはずである。

【Misson4 画面】
図1 Mission3画面





【ステップ2 ビットマップリソースの追加】

【ステップ2−1 ビットマップの挿入 Part1】
解説
「挿入」メニューより、「リソース」を選択。

そうすると、次の、図13のようなウインドウが
表れたはずだ。
図2 リソースの追加


【ステップ2−2 ビットマップの挿入 Part2】
解説
左のダイアログウィンドウより、「Bitmap」を選択

新規作成をクリック。

すると、何も描かれていないビットマップリソースが
挿入されたはずだ。

とりあえず、リソースの名前が、
「IDB_BITMAP1」である事を確認する。

名前が違っていたら、「IDB_BITMAP1」に変更する。

変更の仕方は、以下を参照の事。
図3 リソースの挿入ダイアログ


【ステップ2−3 リソース名の変更方法】 解説
左図は、ワークスペース内で、"Resource View" タブ
を選択し、"mission1 リソース" の横チョの[+]をクリック
"Bitmap" の横チョの[+]をクリック
ほんでもって、さっき挿入した Bitmap リソースの上で
右クリックした状態である。

右クリックすると、左図のようにメニューが
でてくるので、その中の"プロパティ"を選択すると
下の画面が出てくる。

下の画面の ID の項目を編集して、
この"ビットマップ プロパティー" ダイアログを閉じれば
リソースの名称変更は完了である。
図4 リソースの名称変更


【ステップ2−4 ビットマップの挿入 Part3】
解説
ビットマップリソースを新規作成すると、
自動的に左の様な画面になったはずだ。

ワークスペースは、"Resource View"に変わっている。

ワークスペースの、"mission1リソース" の横チョの[+]を
クリックして、"Bitmap"の横チョの[+]をクリックして、
IDB_BITMAP1 をダブルクリックすれば、いつでもこの画面に戻ってこれる。

空っぽも寂しいので、何か描いておこう。

僕の絵はヘタクソだが、みんなはもう少しマシなもの
を描いてくれ。
図5 ビットマップの編集







【ステップ3 プログラム改造】

Direct3Dでこのテクスチャーを読み込むルーチンを作ります。

【ステップ3−1 テクスチャー読み込みルーチン】
解説

ワークスペース(左図の部分)から、
d3dmain.cpp をダブルクリックして開きます。

すると画面は、図7の様になったはずです。
図6 ワークスペース


図7 d3dmain.cpp



次に、図8のようにして編集メニューから検索コマンドを選びます。

すると、図9のようなダイアログウィンドウが出てきます、

ここでは、RestoreDeviceObjects というキーワードで検索を実行。

この操作を二回繰り返すと、リスト1aのプログラムが出てくるはずです。
図9 検索ウィンドウ
図8 検索コマンド


改造前
リスト1a

解説
関数 RestoreDeviceObjects は、3D描画環境(IDirect3DDevice8)
を初期化もしくは再初期化した際に呼び出されるようになっています。
3D描画環境が再初期化されるとテクスチャも破棄される為、
テクスチャの読み込みはここで行うのが良い事になります。

テクスチャの読み込みの為に、以下の様に変更して下さい。

改造後
リスト1b

解説
実際に入力するのは、リスト1bの白バックの部分です。
CreateTextureFromResourceEx はDirectX 関数で、リソースから
テクスチャを生成します。詳しくは、Microsoft のドキュメントを
参照してください。Color key を設定していますが、これは、
透過色の設定で、用意したグラフィックの透過させたい部分の色
を指定して下さい。

g_pTexture はテクスチャを保存する為のグローバル変数、
g_fTexImageWidth および g_fTexImageHeight は、テクスチャの
サイズを保持するグローバル変数で、
d3dmain.cpp の最初の方で宣言しています。

g_fTexImageWidth、g_fTexImageHeight の 1.0 はテクスチャ全体を
意味しています。



【ステップ3−2 テクスチャーの破棄】
解説

再度、図10のようにして編集メニューから検索コマンドを選びます。

すると、図11のようなダイアログウィンドウが出てきます、

こんどは、InvalidateDeviceObjects というキーワードで検索を実行。

図11 検索ウィンドウ
図10 検索コマンド


改造前
リスト2a

解説
関数 InvalidateDeviceObjects は、3D描画環境(IDirect3DDevice8)
を破棄もしくは再初期化する直前に呼び出されるようになっています。
3D描画環境が再初期化されるとテクスチャも強制的に破棄される為、
その直前にテクスチャを明示的に破棄しておくのが無難です。
その為に、以下の様に変更して下さい。

改造後
リスト2b





【ステップ4 実行】

改造し終えたらF5キーを押して実行してみましょう。
図12 実行画面

見た目は何も変わっていないようですが、テクスチャが読み込まれ、
終了するときに破棄しています。

実際の表示は次回に譲ります。

戻る