Beispiel #1
0
        public virtual void Rotate(GamePlay.Camera.eCameraAxis axis, float angle, bool rotLookAt = false)
        {
            if (Camera == null)
            {
                return;
            }

            var pos    = Camera.CameraData.Position;
            var lookAt = Camera.CameraData.LookAt;

            switch (axis)
            {
            case EngineNS.GamePlay.Camera.eCameraAxis.Forward:
            {
                var forward = Camera.CameraData.Direction;
                var up      = Camera.CameraData.Up;
                var mat     = EngineNS.Matrix.RotationAxis(forward, angle);
                up = EngineNS.Vector3.TransformCoordinate(up, mat);
                Camera.LookAtLH(pos, lookAt, up);
            }
            break;

            case EngineNS.GamePlay.Camera.eCameraAxis.Up:
            {
                var up     = EngineNS.Vector3.UnitY;
                var mat    = EngineNS.Matrix.RotationAxis(up, angle);
                var dir    = EngineNS.Vector3.TransformCoordinate((pos - lookAt), mat);
                var newPos = lookAt + dir;
                Camera.LookAtLH(newPos, lookAt, up);
            }
            break;

            case EngineNS.GamePlay.Camera.eCameraAxis.Right:
            {
                var right  = Camera.CameraData.Right;
                var mat    = EngineNS.Matrix.RotationAxis(right, angle);
                var dir    = EngineNS.Vector3.TransformCoordinate((pos - lookAt), mat);
                var newPos = lookAt + dir;
                Camera.LookAtLH(newPos, lookAt, Camera.CameraData.Up);
            }
            break;
            }
            KeepDirection = Camera.CameraData.Direction;
        }
Beispiel #2
0
        public virtual void Move(GamePlay.Camera.eCameraAxis axis, float step, bool moveWithLookAt = false)
        {
            //if (Camera == null)
            //    return;

            //var pos = Camera.Position;
            //var lookAt = Camera.LookAt;
            //switch(axis)
            //{
            //    case EngineNS.GamePlay.Camera.eCameraAxis.Forward:
            //        {
            //            var dir = pos - lookAt;
            //            var len = dir.Length();
            //            if(step < len)
            //            {
            //                dir.Normalize();
            //                var newPos = pos - dir * step;
            //                Camera.LookAtLH(newPos, lookAt, EngineNS.Vector3.UnitY);
            //            }
            //        }
            //        break;
            //    case EngineNS.GamePlay.Camera.eCameraAxis.Up:
            //        {
            //            var up = Camera.Up;
            //            up.Normalize();
            //            var delta = up * step;
            //            var newPos = pos + delta;
            //            var newLookAt = lookAt + delta;
            //            Camera.LookAtLH(newPos, newLookAt, up);
            //        }
            //        break;
            //    case EngineNS.GamePlay.Camera.eCameraAxis.Right:
            //        {
            //            var right = Camera.Right;
            //            right.Normalize();
            //            var delta = right * step;
            //            var newPos = pos - delta;
            //            var newLookAt = lookAt - delta;
            //            Camera.LookAtLH(newPos, newLookAt, Camera.Up);
            //        }
            //        break;
            //}
        }