LAST UPDATE 1998/07/04


『 その4-6 』




 ■ プログラム解説


FormのLoadイベント
 フォームが読み込まれたとき(このプログラムの場合は、フォームが表示される直前と言った方が正確かもしれない)、必ず発生するイベントなので、各種初期化のコードを書いておくことができる。ここでの

    Call Dx_Init(Pic.hwnd,1)

 という命令は、先ほど定義した関数の中の1つで、DirectXを使って何かを表示するための初期化を全て行う関数である。
 ()内のPic.hwndとは、ピクチャーボックスのハンドルの値が入っていて、その後の1はハードウェアを使うか使わないかを宣言する引数である。…と、この説明ではVBのヘルプと同じではないか。  わかりやすく説明すると、Windowsがピクチャーボックスに何かを表示したりするときに、それがどこにあって、どの程度の大きさで、どういった具合に表示すれば良いかという情報が必要で、その情報の格納場所を示しているのである。  実際VBのみでプログラミングしている場合には、内部で自動的にやり取りされる物なので、意識する必要はない。しかし、今回のようにDLLを介してDirectXや、WindowsAPIを使うような、ちょっとディ~プなプログラムを作るときには、必要になるのである。なぜなら、ピクチャーボックスというのはVBだけで通用する方言であり、DirectXWindowsAPIにとっては「なんのこっちゃ??」という物体なのである。そこでピクチャーボックスの情報を、みんなが知ってる形式での通知が必要なのである。
 その後ろの「1」であるが、これはパソコンに装着されたグラフィックチップの機能を使用して描画を行うように命令をしている。逆にこれを「0」にするとグラフィックチップの機能のかわりにプログラムで同じように計算をして描画を行う。(グラフィックチップとはパソコンがディスプレイに文字や絵を表示するのを行っている、いってみれば機械であって、パソコンには必ずついている。)
 どちらも描画をすることには変わりないのだが、「1」のグラフィックチップの機能を使用した場合の方が描画のスピードが速い。しかしDirectXとグラフィックチップとそれを制御するドライバのそれはそれは深い関係から、正常に(思った通りに)描画してくれないこともある。先程表示した赤い玉が、緑やその他変な色になってしまったときには、「0」にして Call Dx_Init(Pic.hwnd,0) 試してもらいたい。今度はそれらしく表示されたであろう。

FormのUnLoadイベント
 このイベントは、読み込まれているフォームが破棄される時(このプログラムでは終了時になる)に必ず発生するもので、ここでは、起動時にDirectX用にいろいろと初期化したものがもう必要ないので捨てて構わないということをWindowsに対して通知しているのである。これを行わないと、プログラムを実行するたびにWindows内にDirectX用のエリアが確保されつづけ、そのうちあなたは「このプログラムは不正な処理をしたため…」というメッセージを見ることになる。

StartのClickイベント
 AddMeshX形式のファイルを読み込み、座標(0, 0, 0)に配置する命令である。
 この関数には3個の引数が必要で、最初がX形式の形状データのファイル名。次が親オブジェクトのID番号、最後が表示の方法である。

 さて、ここでまた分けのわからない用語が登場した。「親オブジェクト」である。これは3DアトリエのSを買っていただいて、それなりに使いこなしている人や、PGでモデリングして、他のモーションエディタを使ってアニメーションを制作している人にとっては理解できる用語なはずである。実は今回制作するJunctionというゲーム中では親子関係は必要なかったりする。ということなので、ここでは-1を指定して「親はいない」という設定にする。

 また、表示方法であるが、
 0:ワイヤーフレーム、
 1:フラットシェーディング、
 2:グーロシェーディング(スムーズシェーディング)

である。 ResetCameraは読み込まれたオブジェクトを画面いっぱいに表示されるようにカメラの位置を調整する関数である。引数はオブジェクトのIDを指定する。-1にすると、現在読み込まれている全てのオブジェクトを表示するようカメラ位置を調整するという意味になる。 Dx_Drawはピクチャーボックスに描画するという関数で、引数はない。これを行わないと何も表示されない。

 ■ 引数

 「後で説明する」と書いた引数であるが、上の説明の中で、大方理解できたはず。
 要するに、関数が必要とする情報の事だったのである。

 ■ 世界の構成

 さて、画面中に1個赤い玉が表示されているわけだが、あなたが今扱っているのは3次元である。ば~ちゃるなのである。紙の上にエンピツで玉を描いたのとはわけが違う。ということであなたは今あなたが扱っている「世界」の構成を理解しておく必要がある。現在の状態を客観的な立場から見た図を示す。(図1)




その4-1 | その4-2 | その4-3 | その4-4 | その4-5 | その4-6 | その4-7

『 サルのゲーム製作講座 』 目次 | その 1 | その 2 | その 3 | その 4 |
その 5 | その 6 | その 7 | その 8 | その 9 | その 10 | その 11


もどる

e-mail: sc_3da@magical2.egg.or.jp