ایکس فائل لوڈ کریں اور ماڈل دیکھیں

جب صفحے کی تازہ کاری :
صفحہ تخلیق تاریخ :

خلاصہ

ماڈل کا ڈیٹا ایکس فائل (.x) سے پڑھا جاتا ہے اور ظاہر کیا جاتا ہے۔

Xファイルを読み込んでモデルを表示

آپریٹنگ ماحول

ضروری شرائط

XNA ورژن کی حمایت کی
  • 2.0
  • 3.0
  • 3.1
  • 4.0
حمایت یافتہ پلیٹ فارم
  • ونڈوز (ایکس پی ایس پی 2، وسٹا. 7)
  • Xbox360
  • ونڈوز فون 7
Windows Required Vertex Shader Version 2.0
Windows Required پکسل شادer Version 2.0

آپریٹنگ ماحول

پلیٹ فارم
  • ونڈوز 7
  • Xbox360
  • ونڈوز فون 7 ایمولیٹر

مادہ

ایکس فائل کیا ہے

ایکس فائل ایک ایسی فائل ہے جسے مقام کی معلومات اور عام معلومات ، ساخت کے حوالہ کے راستے ، فریم ، اینیم ڈیٹا وغیرہ کے ساتھ ورٹیکس ڈیٹا کو یکجا کرکے ماڈل ڈیٹا کے طور پر استعمال کیا جاسکتا ہے۔ ایسی بہت سی دیگر فائلیں ہیں جن میں ماڈل ڈیٹا ہوتا ہے ، لیکن ایکس فائلوں کو ڈائریکٹ ایکس 9 تک معیاری ماڈل ڈیٹا کے طور پر استعمال کیا جاتا تھا اور ایکس این اے کے ذریعہ معیاری فارمیٹ کے طور پر حمایت کی جاتی ہے۔

ایکس فائلیں آپ کو پروگرام میں براہ راست ورٹیکس ڈیٹا بنانے کی پریشانی کو بچاتی ہیں اور بہت آسان کوڈ رائٹنگ کے ساتھ پیچیدہ ماڈلز کی جیومیٹری کھینچنا ممکن بناتی ہیں۔ چونکہ ڈیٹا خود ایکس فائل میں بیان کیا گیا ہے ، لہذا فائدہ یہ ہے کہ شکل تبدیل ہونے پر بھی پروگرام کو تبدیل کرنے کی ضرورت نہیں ہے۔

ماڈل ڈیٹا فائلیں جیسے ایکس فائلیں بنیادی طور پر "ماڈلنگ سافٹ ویئر" اور آؤٹ پٹ فائلوں کے ساتھ بنائی جاتی ہیں۔ میں بنیادی طور پر ماڈلنگ سافٹ ویئر استعمال کرتا ہوں جسے "میٹاسکویا" کہا جاتا ہے ، اور ایک شیئر ویئر ورژن اور فری ویئر ورژن ہے ، لیکن میں فری ویئر ورژن کی سفارش کرتا ہوں کیونکہ یہ ایکس فائلوں کو آؤٹ پٹ کرسکتا ہے۔ یہ چند جاپانی سافٹ ویئر میں سے ایک ہے جو فری ویئر کے ساتھ ایکس فائلوں کو آؤٹ پٹ کرسکتا ہے۔

اس معاملے میں ، میں نے نیچے دیئے گئے کی طرح ایک سادہ ماڈل بنایا اور اسے ایکس فائل کے طور پر آؤٹ پٹ کیا۔

メタセコイアでモデルを作成

آؤٹ پٹ ہونے پر ، فائل نیچے دی گئی کی طرح نظر آئے گی۔ اس صورت میں ، ہم "ماڈل ڈاٹ ایکس" کا نام استعمال کریں گے۔

出力したXファイル

X فائلوں کو مواد میں رجسٹر کریں

اپنے بنائے ہوئے ایکس فائل کو اپنے پروجیکٹ کے مواد کے فولڈر میں شامل کریں۔ وسائل کو شامل کرنے کے طریقہ کار کے بارے میں تفصیلات کے لئے ، "لوڈنگ وسائل (مواد)" دیکھیں۔

Xファイルをコンテンツに追加

کھیت

ایکس فائل سے ڈیٹا پڑھنے اور اسے ظاہر کرنے کے لئے ، "ماڈل" کلاس استعمال کریں۔ ماڈل کلاس میں ماڈل کی نمائش کے لئے ضروری تمام "ورٹیکس بفرز"، "انڈیکس بفرز"، "اثرات"، "بناوٹ" وغیرہ شامل ہیں، لہذا آپ کو صرف اس کو تیار کرنے کی ضرورت ہے.

/// <summary>
/// モデル
/// </summary>
private Model model = null;

لوڈ نگ ماڈل

ماڈل ڈیٹا "گیم ڈاٹ لوڈ کنٹینٹ" طریقہ کار میں "کنٹینٹ منیجر" سے لوڈ کیا جاتا ہے۔ یہ بناوٹ ، فونٹ وغیرہ لوڈ کرنے کے مترادف ہے۔ اثاثے کا نام "ماڈل" کے طور پر رجسٹرڈ ہے۔

// モデルを作成
this.model = this.Content.Load<Model>("Model");

پیرامیٹرز ترتیب دینا

اس بار ، پیرامیٹرز ہر وقت تبدیل نہیں ہوتے ہیں ، لہذا وہ ماڈل ڈیٹا لوڈ کرنے کے فورا بعد سیٹ ہوجاتے ہیں۔ اگر ماڈل مسلسل پوزیشن یا کیمرے کی ترتیبات کو تبدیل کر رہا ہے تو ، مجھے لگتا ہے کہ یہ گیم ڈاٹ ڈرا طریقہ کار میں سیٹ کیا جائے گا۔

// 今回はパラメータをあらかじめ設定しておく
foreach (ModelMesh mesh in this.model.Meshes)
{
    foreach (BasicEffect effect in mesh.Effects)
    {
        // デフォルトのライト適用
        effect.EnableDefaultLighting();

        // ビューマトリックスをあらかじめ設定 ((9, 9, 9) から原点を見る)
        effect.View = Matrix.CreateLookAt(
            new Vector3(9.0f, 9.0f, 9.0f),
            Vector3.Zero,
            Vector3.Up
        );

        // プロジェクションマトリックスをあらかじめ設定
        effect.Projection = Matrix.CreatePerspectiveFieldOfView(
            MathHelper.ToRadians(45.0f),
            (float)this.GraphicsDevice.Viewport.Width /
                (float)this.GraphicsDevice.Viewport.Height,
            1.0f,
            100.0f
        );
    }
}

چونکہ ایک ہی "ماڈل" میں متعدد میش شامل ہوسکتے ہیں ، لہذا اسے "ماڈل میشز" میں شمار کیا جاتا ہے اور تمام میشز پر سیٹ کیا جاتا ہے۔

اس کے علاوہ ، چونکہ ایک "ماڈل میش" میں متعدد اثرات ہوسکتے ہیں ، لہذا میں انہیں "ماڈل میش اثرات" میں درج کرتا ہوں اور انہیں تمام اثرات پر سیٹ کرتا ہوں۔

یہاں ہم نے پہلے سے طے شدہ روشنی کی ترتیبات ، ویو میٹرکس اور پروجیکشن میٹرکس کو پہلے سے سیٹ کیا ہے۔

ڈرائنگ

ایک ماڈل کھینچنا بہت آسان ہے ، اور آپ اسے ایک ہی "ماڈل میش ڈاٹ ڈرا" طریقہ کار کے ساتھ کھینچ سکتے ہیں۔ چونکہ ہم میش یونٹوں میں ڈرائنگ کر رہے ہیں ، لہذا ہم تمام میشوں کی گنتی اور کھینچنے کے لئے "ماڈل میشز" کا استعمال کرتے ہیں۔

// モデルを描画
foreach (ModelMesh mesh in this.model.Meshes)
{
    mesh.Draw();
}

ModelMesh.Draw طریقہ

پہلے سے طے شدہ اثرات کا استعمال کرتے ہوئے ہر ماڈل میش پارٹ کھینچیں۔

تمام کوڈز

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;
#if WINDOWS_PHONE
using Microsoft.Xna.Framework.Input.Touch;
#endif

namespace XFile
{
    /// <summary>
    /// ゲームメインクラス
    /// </summary>
    public class GameMain : Microsoft.Xna.Framework.Game
    {
        /// <summary>
        /// グラフィックデバイス管理クラス
        /// </summary>
        private GraphicsDeviceManager graphics = null;

        /// <summary>
        /// スプライトのバッチ化クラス
        /// </summary>
        private SpriteBatch spriteBatch = null;

        /// <summary>
        /// モデル
        /// </summary>
        private Model model = null;


        /// <summary>
        /// GameMain コンストラクタ
        /// </summary>
        public GameMain()
        {
            // グラフィックデバイス管理クラスの作成
            this.graphics = new GraphicsDeviceManager(this);

            // ゲームコンテンツのルートディレクトリを設定
            this.Content.RootDirectory = "Content";

#if WINDOWS_PHONE
            // Windows Phone のデフォルトのフレームレートは 30 FPS
            this.TargetElapsedTime = TimeSpan.FromTicks(333333);

            // バックバッファサイズの設定
            this.graphics.PreferredBackBufferWidth = 480;
            this.graphics.PreferredBackBufferHeight = 800;

            // フルスクリーン表示
            this.graphics.IsFullScreen = true;
#endif
        }

        /// <summary>
        /// ゲームが始まる前の初期化処理を行うメソッド
        /// グラフィック以外のデータの読み込み、コンポーネントの初期化を行う
        /// </summary>
        protected override void Initialize()
        {
            // TODO: ここに初期化ロジックを書いてください

            // コンポーネントの初期化などを行います
            base.Initialize();
        }

        /// <summary>
        /// ゲームが始まるときに一回だけ呼ばれ
        /// すべてのゲームコンテンツを読み込みます
        /// </summary>
        protected override void LoadContent()
        {
            // テクスチャーを描画するためのスプライトバッチクラスを作成します
            this.spriteBatch = new SpriteBatch(this.GraphicsDevice);

            // モデルを作成
            this.model = this.Content.Load<Model>("Model");

            // 今回はパラメータをあらかじめ設定しておく
            foreach (ModelMesh mesh in this.model.Meshes)
            {
                foreach (BasicEffect effect in mesh.Effects)
                {
                    // デフォルトのライト適用
                    effect.EnableDefaultLighting();

                    // ビューマトリックスをあらかじめ設定 ((9, 9, 9) から原点を見る)
                    effect.View = Matrix.CreateLookAt(
                        new Vector3(9.0f, 9.0f, 9.0f),
                        Vector3.Zero,
                        Vector3.Up
                    );

                    // プロジェクションマトリックスをあらかじめ設定
                    effect.Projection = Matrix.CreatePerspectiveFieldOfView(
                        MathHelper.ToRadians(45.0f),
                        (float)this.GraphicsDevice.Viewport.Width /
                            (float)this.GraphicsDevice.Viewport.Height,
                        1.0f,
                        100.0f
                    );
                }
            }
        }

        /// <summary>
        /// ゲームが終了するときに一回だけ呼ばれ
        /// すべてのゲームコンテンツをアンロードします
        /// </summary>
        protected override void UnloadContent()
        {
            // TODO: ContentManager で管理されていないコンテンツを
            //       ここでアンロードしてください
        }

        /// <summary>
        /// 描画以外のデータ更新等の処理を行うメソッド
        /// 主に入力処理、衝突判定などの物理計算、オーディオの再生など
        /// </summary>
        /// <param name="gameTime">このメソッドが呼ばれたときのゲーム時間</param>
        protected override void Update(GameTime gameTime)
        {
            // Xbox 360 コントローラ、Windows Phone の BACK ボタンを押したときに
            // ゲームを終了させます
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
            {
                this.Exit();
            }

            // TODO: ここに更新処理を記述してください

            // 登録された GameComponent を更新する
            base.Update(gameTime);
        }

        /// <summary>
        /// 描画処理を行うメソッド
        /// </summary>
        /// <param name="gameTime">このメソッドが呼ばれたときのゲーム時間</param>
        protected override void Draw(GameTime gameTime)
        {
            // 画面を指定した色でクリアします
            this.GraphicsDevice.Clear(Color.CornflowerBlue);

            // モデルを描画
            foreach (ModelMesh mesh in this.model.Meshes)
            {
                mesh.Draw();
            }

            // 登録された DrawableGameComponent を描画する
            base.Draw(gameTime);
        }
    }
}