import BoundingSphere from '../Core/BoundingSphere.js';
import Cartesian2 from '../Core/Cartesian2.js';
import Cartesian3 from '../Core/Cartesian3.js';
import Cartesian4 from '../Core/Cartesian4.js';
import Cartographic from '../Core/Cartographic.js';
import defaultValue from '../Core/defaultValue.js';
import defined from '../Core/defined.js';
import defineProperties from '../Core/defineProperties.js';
import DeveloperError from '../Core/DeveloperError.js';
import EasingFunction from '../Core/EasingFunction.js';
import Ellipsoid from '../Core/Ellipsoid.js';
import EllipsoidGeodesic from '../Core/EllipsoidGeodesic.js';
import Event from '../Core/Event.js';
import getTimestamp from '../Core/getTimestamp.js';
import HeadingPitchRange from '../Core/HeadingPitchRange.js';
import HeadingPitchRoll from '../Core/HeadingPitchRoll.js';
import Intersect from '../Core/Intersect.js';
import IntersectionTests from '../Core/IntersectionTests.js';
import CesiumMath from '../Core/Math.js';
import Matrix3 from '../Core/Matrix3.js';
import Matrix4 from '../Core/Matrix4.js';
import OrthographicFrustum from '../Core/OrthographicFrustum.js';
import OrthographicOffCenterFrustum from '../Core/OrthographicOffCenterFrustum.js';
import PerspectiveFrustum from '../Core/PerspectiveFrustum.js';
import Quaternion from '../Core/Quaternion.js';
import Ray from '../Core/Ray.js';
import Rectangle from '../Core/Rectangle.js';
import Transforms from '../Core/Transforms.js';
import CameraFlightPath from './CameraFlightPath.js';
import MapMode2D from './MapMode2D.js';
import SceneMode from './SceneMode.js';
/**
* The camera is defined by a position, orientation, and view frustum.
*
* The orientation forms an orthonormal basis with a view, up and right = view x up unit vectors.
*
* The viewing frustum is defined by 6 planes.
* Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components
* define the unit vector normal to the plane, and the w component is the distance of the
* plane from the origin/camera position.
*
* @alias Camera
*
* @constructor
*
* @param {Scene} scene The scene.
*
* @demo {@link https://sandcastle.cesium.com/index.html?src=Camera.html|Cesium Sandcastle Camera Demo}
* @demo {@link https://sandcastle.cesium.com/index.html?src=Camera%20Tutorial.html">Sandcastle Example from the