Beispiel #1
0
        /// <summary>
        /// カメラ視点の更新処理
        /// </summary>
        /// <param name="vm">カメラ視点モード</param>
        private void ViewpointUpdate(ViewpointMode vm)
        {
            Ode.Vector3 viewPos = new Ode.Vector3();		// 視点の位置(x, y, z)
            Ode.Vector3 viewDir = new Ode.Vector3();		// 視点の方向(ヘッド,ピッチ,ロール)

            // 車の位置行列・回転行列を取得
            Ode.Vector3 pos; ;
            Ode.Matrix3 R;
            _car.GetStatus(out pos, out R);

            switch (vm)
            {
                case ViewpointMode.Fixed:
                    break;

                case ViewpointMode.Trace:
                    viewPos.X = pos.X;
                    viewPos.Y = pos.Y;
                    viewPos.Z = 10.0f;
                    viewDir.X = 90.0f;
                    viewDir.Y = -90.0f;
                    viewDir.Z = 0.0f;
                    Ds.SetViewpoint(ref viewPos, ref viewDir);		// 視点の設定
                    break;

                case ViewpointMode.FirstPerson:
                    Real yaw = (float)Math.Atan2(R.M21, R.M11) / Ode.PI * 180.0f;

                    viewPos.X = pos.X;
                    viewPos.Y = pos.Y;
                    viewPos.Z = 0.5f;
                    viewDir.X = 90.0f - yaw;
                    viewDir.Y = 0.0f;
                    viewDir.Z = 0.0f;
                    Ds.SetViewpoint(ref viewPos, ref viewDir);		// 視点の設定
                    break;
            }
        }
Beispiel #2
0
 /// <summary>
 /// Drawstuffのコマンド入力時コールバック関数
 /// <param name="cmd">コマンド入力</param>
 /// </summary>
 private void CommandFunctionCallback(IntPtr cmd)
 {
     switch ((char)cmd)
     {
         case 'f':
             _car.speedL += 0.5f;
             break;
         case 'd':
             _car.speedL -= 0.5f;
             break;
         case 'j':
             _car.speedR += 0.5f;
             break;
         case 'k':
             _car.speedR -= 0.5f;
             break;
         case 'u':
             _car.v += 1.0f;
             break;
         case 'i':
             _car.v -= 1.0f;
             break;
         case 'y':
             _car.omega += 0.4f;
             break;
         case 'o':
             _car.omega -= 0.4f;
             break;
         case 's':
             _car.speedR = _car.speedL = 0.0f;
             break;
         // カメラ視点:固定
         case 'z':
             _viewPointMode = ViewpointMode.Fixed;
             break;
         // カメラ視点:追従
         case 'x':
             _viewPointMode = ViewpointMode.Trace;
             break;
         // カメラ視点:一人称視点
         case 'c':
             _viewPointMode = ViewpointMode.FirstPerson;
             break;
     }
     Console.WriteLine("SpeedL: " + _car.speedL.ToString() + ", SpeedR: " + _car.speedR.ToString());
 }