TOP

ただいま開発中です

フォローはどうぞお気楽に!

SoundCloud (ゲームBGM集)

今後、力をいれていきます。

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

[TOP] [xna学習日記TOP] [前へ] [次へ]
2009年04月02日:第4話:コンテント・パイプライン

今回より、何らかの立体モデルを表示してみることにする。
サンプルとして、以下の立体モデルを用意してみた。
これが何かは、モデリングした僕にも分らない。w

立体モデルのファイル名は、「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つのファイルを選択、追加する。
ファイル追加後、ソリューションエクスプローラは以下のようになる。

これて、プロジェクトに立体モデルと、そのテクスチャが組み込まれた。多分。

2009年04月07日:第6話:補足も参照。

2009年04月02日:第5話:立体モデルの描画

コンテント・パイプラインを使って、プロジェクトに立体モデルを組み込むことができた。
そこで、その立体モデルを描画するコードを、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らしい)」が用意されていた。

そのおかげで、結構簡単に立体モデルが描画できた。

実行結果


[TOP] [xna学習日記TOP] [前へ] [次へ]
更新履歴:
2009年5月14日:[説明文]「立体モデルの格納先」を「立体モデルのオブジェクトへの参照の格納先 」に訂正。気になったものですから。
〜 様々なデジタルコンテンツを制作しています 〜
MUKAGOSOFTWARE DEVELOPMENT
XBOX360の開発環境「XNA Game Studio」を弄くってみる・・・
xna学習日記