今後、力をいれていきます。
PSMゲーム
Bloodred Wyvern (ブラッドレッドワイバーン)
Bloodred Wyvern 2
Gravity Anomaly Zone 不可思議重力帯
その他
PlayStation®Mobile関連リンク集
PlayStation®Mobile学習日記
XBLIG
BLASTER AND AMETHYST
BLASTER AND MORION
LEUCISTIC WYVERN
Bioerosion
URGENT EVASION 360
The Undead Syndrome / TUS 2
Dark Storm Blast 360
その他
Making Of The Undead Syndrome[3DCG]
Making Of The Undead Syndrome2
XNA関連リンク集
xna学習日記
第1〜3話
第4〜5話
第6〜7話
第8〜9話
第10〜12話
第13〜14話
第15話
ブラウザゲーム
発火少年の地面焦がし
MAGICAL METEOR SHOWER
メタセコイア備忘録
東日本大震災(Aftermath of the 2011 Tohoku earthquake and tsunami)
ムカゴソフトウェア開発
e-mail:cqp00202@nifty.ne.jp
今回より、何らかの立体モデルを表示してみることにする。
立体モデルのファイル名は、「sample_model.x」(DirectXのX形式ファイル)。
また、この立体モデルのテクスチャは、256x256のビットマップファイル「sample_txr.bmp」である。
少々手抜きだが。
立体モデル「sample_model.x」ダウンロード
http://mukago.game.coocan.jp/sample/sample_model.x
テクスチャ「sample_txr.bmp」ダウンロード
http://mukago.game.coocan.jp/sample/sample_txr.bmp
これら2つのファイルを、プロジェクトに追加する。
xnaでは、プログラムで使うコンテント・ファイル・・・つまり画像や立体モデル、効果音等を、コンテント・パイプラインという仕組みを利用して、プロジェクトに組み込むようだ。
でもって、コンパイル時に、それらをまとめたバイナリファイルを吐くらしい。
VisualC#のソリューションエクスプローラを見ると、「Content」というところがあるので、それを右クリック。
[追加]→[既存の項目]を選択。
すると、「既存項目の追加」ダイアログが表示されるので、先ほどの2つのファイルを選択、追加する。
ファイル追加後、ソリューションエクスプローラは以下のようになる。
これて、プロジェクトに立体モデルと、そのテクスチャが組み込まれた。多分。
そこで、その立体モデルを描画するコードを、Game1クラスに記述してみた。
using System; using System.Collections.Generic; using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.GamerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Net; using Microsoft.Xna.Framework.Storage; namespace WindowsGame1 { public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; Model samplemodel; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } protected override void Initialize() { base.Initialize(); } protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); //モデルの読み込み samplemodel = Content.Load<Model>("sample_model"); } protected override void UnloadContent() { } protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)this.Exit(); base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); foreach (ModelMesh mesh in samplemodel.Meshes) { foreach (BasicEffect effect in mesh.Effects) { //デフォルトのライティングを有効 effect.EnableDefaultLighting(); //ビュー行列を設定 effect.View = Matrix.CreateLookAt(new Vector3(6.0f,4.0f,8.0f), Vector3.Zero, Vector3.Up); //射影行列を設定 effect.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f), GraphicsDevice.Viewport.AspectRatio, 1.0f, 10000.0f); //スペキュラカラーの設定 effect.SpecularColor = new Vector3(0.4f, 0.4f, 0.4f); } mesh.Draw(); } base.Draw(gameTime); } } }
まずはメンバフィールドから。
Model samplemodel;
立体モデルのオブジェクトへの参照の格納先として、samplemodelフィールドを用意。
Microsoft.Xna.Framework.Graphics.Modelクラスのオブジェクトである。
でもって、LoadContent()メソッドで、
samplemodel = Content.Load<Model>("sample_model");
立体モデルを読み込む為に、ContentManager.Loadジェネリックメソッドを呼ぶ。
引き数にはアセット名を指定するが、デフォルトでは、ファイルから拡張子を除いたものとなる。
>プロジェクトに組み込んだ立体モデルのプロパティ
型パラメータには、Modelを指定すればいいようだ。
そして、Draw()メソッドで、立体モデルをメッシュ単位で描画している。
・・・って、ここは理解してない点が多々あるが・・・。(苦笑)
xnaでは、プログラマブルシェーダーしかサポートしていないと思い込んでいたら、Direct3Dの固定パイプラインの感覚で扱える「BasicEffectクラス(シェーダーモデル1.1らしい)」が用意されていた。
そのおかげで、結構簡単に立体モデルが描画できた。
実行結果