/*global define*/
define([
'../Core/Cartesian2',
'../Core/Cartesian3',
'../Core/Cartesian4',
'../Core/Cartographic',
'../Core/defaultValue',
'../Core/defined',
'../Core/defineProperties',
'../Core/DeveloperError',
'../Core/EasingFunction',
'../Core/Ellipsoid',
'../Core/IntersectionTests',
'../Core/Math',
'../Core/Matrix3',
'../Core/Matrix4',
'../Core/Quaternion',
'../Core/Ray',
'../Core/Rectangle',
'../Core/Transforms',
'./CameraFlightPath',
'./PerspectiveFrustum',
'./SceneMode'
], function(
Cartesian2,
Cartesian3,
Cartesian4,
Cartographic,
defaultValue,
defined,
defineProperties,
DeveloperError,
EasingFunction,
Ellipsoid,
IntersectionTests,
CesiumMath,
Matrix3,
Matrix4,
Quaternion,
Ray,
Rectangle,
Transforms,
CameraFlightPath,
PerspectiveFrustum,
SceneMode) {
"use strict";
/**
* 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
*
* @demo {@link http://cesiumjs.org/Cesium/Apps/Sandcastle/index.html?src=Camera.html|Cesium Sandcastle Camera Demo}
* @demo {@link http://cesiumjs.org/Cesium/Apps/Sandcastle/index.html?src=Camera%20Tutorial.html">Sandcastle Example from the