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


【ステップ1】

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

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

【Misson2 画面】
図1 Mission3画面








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

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

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

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

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


図3 d3dmain.cpp



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

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

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

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


改造前
リスト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 実行画面

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

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

戻る