やっつけXNA


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

やっつけXNA


メタセコイアで作った3Dデータは、xファイルで出力することでゲームに使える。
いろんな方法があるけど、ここではXNAってので3Dゲームを作るための走りだけ書いておくよ。
はっきりいって俺自身もよくわかってないからあんまり期待しないでね。

プロジェクト起動


VisualC#を起動して、新しいプロジェクトを作ろう。
こういう画面が出るので、Windows Gameと書かれたアイコンを選択だ。

プロジェクトを作成すると、既にある程度プログラムが書かれてるわけだけど、長くてとても見づらい。
そこで、右クリックで出てくる小窓の中から「アウトライン」の「定義に折りたたむ」をクリックするか
画面左にあるマイナスのマークの四角形をクリックしていって、プログラムをコンパクトに折りたたんでしまおう。


まぁこんな感じにね。

折りたたんだプログラムは、こういう内訳になってるよ。画像の文が読みづらいけど勘弁してね。

ここから実製作

ここまでは自動でやってくれる下準備だったけど、ここからは自分で作っていくよ。
まずは自分で作ったXファイルを、プロジェクトを作ったフォルダ内にある「content」フォルダに入れよう。

そして、VC#の画面右にある「ソリューションエクスプローラ」というツリー表示してるやつの中にある「Content」
を右クリックして、「追加」の「既存の項目」から、さっきcontentフォルダに入れた自前のXファイルを選ぼう。
これでxファイルをこのプログラムで使うための準備ができたのです。

で、そのXファイルをプログラムで使うために、「Model」という型の変数を、public game1()と書かれてるところの上あたりに
作っておく。
そして、折り畳んでいた関数の中からprotected override void LoadContent()を開いて、
作っておいたModel型変数に3D情報をロードする命令を書くのだ。

文字潰れちゃって見づらいので補足。下のが3Dモデルをロードする命令だよ。
Content.Load<Model>("自前で作った3Dモデル名")
という命令で、3Dモデルのいろんな情報を変数にロードできるのだ。

3Dモデルの読み込みはこれでOK。次は画面に表示する命令たくさんだよ。

Drawの中にたくさん書き込む

次はロードした3Dモデルを実際に画面に映し出す命令たちを書いていくよ。
折り畳んでいたprotected override void Draw();という部分を開いて、いっぱい書いていく。
これがそのプログラム


・・・これをDraw内に書いていく・・・
長いから1つずつ説明するね。
ただし長い説明が嫌いな人はとにかく上のプログラムをDraw内に書き込むだけで、一応は理屈を知らなくても何とかなるよ。


と、その前に。
3Dモデルを映し出すのに最低限必要なものを書いておくよ。
まず、3Dモデルがどの位置にあるかという情報。そして、「撮影用カメラ」がどの位置にあるかという情報。
さらにどういう光がその場所にあるかという情報。最後に、カメラの投影範囲がどのくらいかという情報。
この4つの情報が揃っていれば、3Dモデルを映し出すことができる。


ということを踏まえた上で実際のプログラム。
まずは、foreachというのを2つ重ねで作る。
3Dデータ内にはメッシュの情報とかエフェクトの情報とかが何個もあることが普通なので
ある分だけ表示命令を繰り返すためのループ命令が必要というわけだ。

そして、このforeachの中に、いろんな情報を書いていくのです。
まずは光源の情報。どんな光が当たっているのか。
本当は自力で詳しく設定する方が思い通りにいくんだけど、そういうのが面倒でとにかく表示用の簡易ライトでいい!
という人は、「EnableDefaultLighting」という命令を使うと、XNA側が自動でライトを用意してくれるよ。

次に3Dモデルの位置。どこに3Dモデルがあるのか。
キーを押したらモデルが走ったりするってのはこのモデルの位置の情報を変えることでできるんだけど
とりあえず表示するだけでいいときはMatrix.Identityというのを使うと特に移動させたりせずに表示できるみたい。
この情報はforeachのカッコ内で作ったeffect.Worldというのに入れてやるよ。

更にカメラの位置の情報。どこから撮影するのか。
Matrix.CreateLookAtというので、カメラの位置、カメラの向いてる方向、カメラの傾きの3つを指定してやれる。
この情報はforeachのカッコ内で作ったeffect.Viewというのに入れてやるよ。



最後にカメラの投影範囲。どのぐらい映るのか。
この命令は長いので「=」の部分でわけて2行にしてるけど、書くときはわけなくてもいいよ。
Matrix.CameraPerspectiveFieldOfViewという命令で、カメラの視野角、縦横比、どの距離まで映せるかの3つの情報を書くことができる。
この情報はforeachのカッコ内で作ったeffect.Projectionというのに入れてやるよ。



そして最後の最後に、2つ重ねになっているforeachの終わりカッコと終わりカッコの間に
Draw命令を書いてやる。今まで長ったらしく光源だのカメラだのモデル位置だの投影範囲だの設定してきたけど
このたった1行の命令で、やっと画面に表示されるのだ。



お疲れ様でした。
問題が起きなければ、ビルドしてデバッグ開始を押すと3Dモデルが画面に現れるはず。
これでモデルの表示プログラム、完成。


・・・解説を作ってみたはいいものの、俺自身もあんま知らないんだよなぁXNA。
詳しく知りたい人は他のホームページをあたってね。ここはほら、あれだよ、とっかかり。
タイトルにもやっつけって書いてあるじゃん?
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。