Spacewar の3Dモデルを操作する

XNA で Spacewar の3Dモデルを、キーの操作で移動/回転します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. XNA で Spacewar の3Dモデル(p1_wedge.fbx) をキーの操作で「移動/回転」しながら描画します。
    基本的な説明は Spacewar の3Dモデルを描画する を参照して下さい。
  2. Game1.cs を編集して3Dモデルを「移動/回転」しながら描画するプログラムを作成します。
    modelPosition は、3Dモデルの三次元座標です。
    modelRotation は、3Dモデルの三次元回転係数です。
    modelVelocity は、3Dモデルの移動係数で modelPosition に加えられます。
    この値は移動キーの操作によって増加し、時間の経過と共に減少します。
        Vector3 modelPosition = Vector3.Zero;   //移動情報 
        Vector3 modelRotation = Vector3.Zero;   //回転情報 
        Vector3 modelVelocity = Vector3.Zero;   //移動係数 
        
  3. Update() メソッドからキーの押し下げを検出する UpdateInput() メソッドを呼び出します。
    キーで指示された移動情報は modelVelocity に設定されます。
    この値は modelPosition に加えられます。
    modelVelocity の値は時間の経過と共に減少します。
            protected override void Update(GameTime gameTime)
            {
                // Allows the game to exit
                if (GamePad.GetState(PlayerIndex.One).Buttons.Back ==
                    ButtonState.Pressed  ||
                    Keyboard.GetState().IsKeyDown(Keys.Escape)) this.Exit();
    
                UpdateInput();                      // 入力を取得します。 
                modelPosition += modelVelocity;     // 速度を現在の位置に追加します。 
                modelVelocity *= 0.95f;             // 時間の経過と共に速度を減速します。 
    
                base.Update(gameTime);
            }
        
  4. キーの押し下げを検出する UpdateInput() です。
    3Dモデルを操作するキーの説明です。
    キー 説明
    数字4キー Y座標の回転
    数字5キー X座標の回転
    数字6キー Z座標の回転
    左矢印キー 左に移動
    右矢印キー 右に移動
    上矢印キー 上に移動
    下矢印キー 下に移動
    数字8キー 奥に移動(小さくなる)
    数字2キー 前に移動(大きくなる)
    空白キー 規定値にリセット
    3Dモデルの回転情報は直接 modelRotation に設定します。
    キーで指示された移動情報は modelVelocity に設定します。
            // キーボードでモデルを操作
            protected void UpdateInput() 
            {
                KeyboardState   keyState = Keyboard.GetState();
                // 回転情報の設定
                if (keyState.IsKeyDown(Keys.NumPad4)) modelRotation.Y += 0.10f;
                if (keyState.IsKeyDown(Keys.NumPad5)) modelRotation.X += 0.10f;
                if (keyState.IsKeyDown(Keys.NumPad6)) modelRotation.Z += 0.10f;
    
                // 移動情報の設定
                Vector3 modelVelocityAdd = Vector3.Zero; 
                if (keyState.IsKeyDown(Keys.Left))    modelVelocityAdd.X = 5.0f;
                if (keyState.IsKeyDown(Keys.Right))   modelVelocityAdd.X = -5.0f;
                if (keyState.IsKeyDown(Keys.Up))      modelVelocityAdd.Y = 5.0f;
                if (keyState.IsKeyDown(Keys.Down))    modelVelocityAdd.Y = -5.0f;
                if (keyState.IsKeyDown(Keys.NumPad8)) modelVelocityAdd.Z = 5.0f;
                if (keyState.IsKeyDown(Keys.NumPad2)) modelVelocityAdd.Z = -5.0f;
                modelVelocity += modelVelocityAdd; 
    
                // Space でリセット 
                if (keyState.IsKeyDown(Keys.Space))
                {
                    modelPosition = Vector3.Zero;
                    modelRotation = Vector3.Zero;
                    modelVelocity = Vector3.Zero;
                } 
            } 
        

超初心者の方のために全ソースコードを掲載します。 (^_^;)
全ソースコード

前田稔(Maeda Minoru)の超初心者のプログラム入門

超初心者のプログラム入門(XNA(C#) game program)