やっつけXNA

やっつけXNA


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

プロジェクト起動


VisualC#を起動して、新しいプロジェクトを作ろう。
こういう画面が出るので、Windows Gameと書かれたアイコンを選択だ。
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (project1.png)

プロジェクトを作成すると、既にある程度プログラムが書かれてるわけだけど、長くてとても見づらい。
そこで、右クリックで出てくる小窓の中から「アウトライン」の「定義に折りたたむ」をクリックするか
画面左にあるマイナスのマークの四角形をクリックしていって、プログラムをコンパクトに折りたたんでしまおう。
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (oritatami1.png)


まぁこんな感じにね。
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (oritatami2.png)

折りたたんだプログラムは、こういう内訳になってるよ。画像の文が読みづらいけど勘弁してね。
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (kansuu1.png)

ここから実製作

ここまでは自動でやってくれる下準備だったけど、ここからは自分で作っていくよ。
まずは自分で作ったXファイルを、プロジェクトを作ったフォルダ内にある「content」フォルダに入れよう。
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (contentforuda.png)

そして、VC#の画面右にある「ソリューションエクスプローラ」というツリー表示してるやつの中にある「Content」
を右クリックして、「追加」の「既存の項目」から、さっきcontentフォルダに入れた自前のXファイルを選ぼう。
これでxファイルをこのプログラムで使うための準備ができたのです。
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (xload.png)

で、そのXファイルをプログラムで使うために、「Model」という型の変数を、public game1()と書かれてるところの上あたりに
作っておく。
そして、折り畳んでいた関数の中からprotected override void LoadContent()を開いて、
作っておいたModel型変数に3D情報をロードする命令を書くのだ。
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (xload2.png)

文字潰れちゃって見づらいので補足。下のが3Dモデルをロードする命令だよ。
Content.Load<Model>("自前で作った3Dモデル名")
という命令で、3Dモデルのいろんな情報を変数にロードできるのだ。
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (xload3.png)

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

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

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

#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (naibu.png)

・・・これをDraw内に書いていく・・・
長いから1つずつ説明するね。
ただし長い説明が嫌いな人はとにかく上のプログラムをDraw内に書き込むだけで、一応は理屈を知らなくても何とかなるよ。
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (draw1.png)


と、その前に。
3Dモデルを映し出すのに最低限必要なものを書いておくよ。
まず、3Dモデルがどの位置にあるかという情報。そして、「撮影用カメラ」がどの位置にあるかという情報。
さらにどういう光がその場所にあるかという情報。最後に、カメラの投影範囲がどのくらいかという情報。
この4つの情報が揃っていれば、3Dモデルを映し出すことができる。
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (renaring.png)


ということを踏まえた上で実際のプログラム。
まずは、foreachというのを2つ重ねで作る。
3Dデータ内にはメッシュの情報とかエフェクトの情報とかが何個もあることが普通なので
ある分だけ表示命令を繰り返すためのループ命令が必要というわけだ。
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (foreach.png)

そして、このforeachの中に、いろんな情報を書いていくのです。
まずは光源の情報。どんな光が当たっているのか。
本当は自力で詳しく設定する方が思い通りにいくんだけど、そういうのが面倒でとにかく表示用の簡易ライトでいい!
という人は、「EnableDefaultLighting」という命令を使うと、XNA側が自動でライトを用意してくれるよ。
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (lightenable.png)

次に3Dモデルの位置。どこに3Dモデルがあるのか。
キーを押したらモデルが走ったりするってのはこのモデルの位置の情報を変えることでできるんだけど
とりあえず表示するだけでいいときはMatrix.Identityというのを使うと特に移動させたりせずに表示できるみたい。
この情報はforeachのカッコ内で作ったeffect.Worldというのに入れてやるよ。
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (identity.png)

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

#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (camera.png)


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

#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (projection.png)


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

#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (draw.png)


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

#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (fin.png)

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

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2010年08月19日 03:31
ツールボックス

下から選んでください:

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