Beispiel #1
0
        public MoveCamera(Camera camera, MovementTime time, Vector3 toPosition, Func<Vector3> toLookAt)
            : base(camera)
        {
            _path = new[] {Camera.Position, toPosition};

            EndTime = !time.UnitsPerSecond
                ? time.Time
                : (0.1f + pathLength())/time.Time;

            _toLookAt = toLookAt;
        }
        public MoveCameraYaw(Camera camera, MovementTime time, Vector3 toPosition, Vector3 toLookAt)
            : base(camera)
        {
            _fromPosition = camera.Position;
            _fromYaw = camera.Yaw;
            _fromPitch = camera.Pitch;

            _toPosition = toPosition;
            _toYaw = (float) Math.Atan2(toPosition.X - toLookAt.X, toPosition.Z - toLookAt.Z);
            _toPitch = -(float)Math.Asin((_toPosition.Y - toLookAt.Y) / Vector3.Distance(_toPosition, toLookAt));

            var angle = _fromYaw - _toYaw;
            if (angle > MathUtil.Pi)
                _fromYaw -= MathUtil.TwoPi;
            else if (angle < -MathUtil.Pi)
                _fromYaw += MathUtil.TwoPi;

            EndTime = time.GetTotalTime(Vector3.Distance(_fromPosition, _toPosition));
        }