CUGL
Cornell University Game Library
Public Member Functions | Static Public Member Functions | Protected Attributes | List of all members
cugl::PerspectiveCamera Class Reference

#include <CUPerspectiveCamera.h>

Inheritance diagram for cugl::PerspectiveCamera:
cugl::Camera

Public Member Functions

 PerspectiveCamera ()
 
 ~PerspectiveCamera ()
 
void dispose () override
 
bool init (const Size &size, float fieldOfView=DEFAULT_CAMERA_FOV)
 
bool init (float width, float height, float fieldOfView=DEFAULT_CAMERA_FOV)
 
bool init (const Rect &rect, float fieldOfView=DEFAULT_CAMERA_FOV)
 
bool init (const Vec2 &origin, const Size &size, float fieldOfView=DEFAULT_CAMERA_FOV)
 
bool init (float x, float y, float width, float height, float fieldOfView=DEFAULT_CAMERA_FOV)
 
void set (const Size &size, float fieldOfView=DEFAULT_CAMERA_FOV)
 
void set (float width, float height, float fieldOfView=DEFAULT_CAMERA_FOV)
 
void set (const Rect &rect, float fieldOfView=DEFAULT_CAMERA_FOV)
 
void set (const Vec2 &origin, const Size &size, float fieldOfView=DEFAULT_CAMERA_FOV)
 
void set (float x, float y, float width, float height, float fieldOfView=DEFAULT_CAMERA_FOV)
 
void update () override
 
float getFieldOfView () const
 
void setFieldOfView (float fov)
 
- Public Member Functions inherited from cugl::Camera
 Camera ()
 
 ~Camera ()
 
const Vec3getPosition () const
 
const Vec3getDirection () const
 
const Vec3getUp () const
 
float getNear () const
 
void setNear (float value)
 
float getFar () const
 
void setFar (float value)
 
const RectgetViewport () const
 
const Mat4getProjection () const
 
const Mat4getView () const
 
const Mat4getCombined () const
 
const Mat4getInverseProjectView () const
 
void lookAt (const Vec3 &target)
 
void lookAt (float x, float y, float z)
 
void normalizeUp ()
 
void rotate (const Quaternion &quat)
 
void rotate (const Vec3 &axis, float angle)
 
void rotateX (float angle)
 
void rotateY (float angle)
 
void rotateZ (float angle)
 
void rotate (float angle)
 
void rotate (const Mat4 &transform)
 
void rotateAround (const Vec3 &point, const Vec3 &axis, float angle)
 
void translate (const Vec3 &vec)
 
void translate (const Vec2 &vec)
 
void translate (float tx, float ty, float tz)
 
void translate (float tx, float ty)
 
void transform (const Mat4 &transform)
 
Vec3 unproject (const Vec3 &windowCoords) const
 
Vec3 unproject (const Vec3 &windowCoords, const Rect &viewport) const
 
Vec3 screenToWorldCoords (const Vec2 &screenCoords) const
 
Vec3 project (const Vec3 &worldCoords) const
 
Vec3 project (const Vec3 &worldCoords, const Rect &viewport) const
 
Vec2 worldToScreenCoords (const Vec3 &worldCoords) const
 
Ray getPickRay (const Vec3 &windowCoords) const
 
Ray getPickRay (const Vec3 &windowCoords, const Rect &viewport) const
 
Ray getPickRayFromScreen (const Vec2 &screenCoords) const
 
Vec2 windowToScreenCoords (const Vec3 &windowCoords) const
 
Vec2 windowToScreenCoords (const Vec3 &windowCoords, const Rect &viewport) const
 
Vec3 screenToWindowCoords (const Vec2 &screenCoords) const
 
Vec3 screenToWindowCoords (const Vec2 &screenCoords, const Rect &viewport) const
 

Static Public Member Functions

static std::shared_ptr< PerspectiveCameraalloc (const Size &size, float fieldOfView=DEFAULT_CAMERA_FOV)
 
static std::shared_ptr< PerspectiveCameraalloc (float width, float height, float fieldOfView=DEFAULT_CAMERA_FOV)
 
static std::shared_ptr< PerspectiveCameraalloc (const Rect &rect, float fieldOfView=DEFAULT_CAMERA_FOV)
 
static std::shared_ptr< PerspectiveCameraalloc (const Vec2 &origin, const Size &size, float fieldOfView=DEFAULT_CAMERA_FOV)
 
static std::shared_ptr< PerspectiveCameraalloc (float x, float y, float width, float height, float fieldOfView=DEFAULT_CAMERA_FOV)
 

Protected Attributes

float _fieldOfView = 67
 
bool _initialized
 
- Protected Attributes inherited from cugl::Camera
Vec3 _position
 
Vec3 _direction
 
Vec3 _upwards
 
Mat4 _projection
 
Mat4 _modelview
 
Mat4 _combined
 
Mat4 _inverse
 
float _near
 
float _far
 
Rect _viewport
 

Detailed Description

This is a class for a camera with a perspective projection.

This camera is used for 3d rendering.

Constructor & Destructor Documentation

cugl::PerspectiveCamera::PerspectiveCamera ( )
inline

Creates a degenerate camera.

All of the matrices are the identity and the viewport is empty.

cugl::PerspectiveCamera::~PerspectiveCamera ( )
inline

Deletes this camera, disposing all resources.

Member Function Documentation

static std::shared_ptr<PerspectiveCamera> cugl::PerspectiveCamera::alloc ( const Size size,
float  fieldOfView = DEFAULT_CAMERA_FOV 
)
inlinestatic

Initializes a new PerspectiveCamera for the given viewport and field of view.

The field of view given is for the height, and is measured in degrees. The field of view for the width will be calculated according to the aspect ratio. Furthermore, the aspect ratio is derived from the viewport size.

The viewport origin is assumed to be (0,0).

Parameters
sizeThe viewport size
fieldOfViewThe field of view of the height, in degrees
Returns
true if initialization was successful.
static std::shared_ptr<PerspectiveCamera> cugl::PerspectiveCamera::alloc ( float  width,
float  height,
float  fieldOfView = DEFAULT_CAMERA_FOV 
)
inlinestatic

Initializes a new PerspectiveCamera for the given viewport and field of view.

The field of view given is for the height, and is measured in degrees. The field of view for the width will be calculated according to the aspect ratio. Furthermore, the aspect ratio is derived from the viewport size.

The viewport origin is assumed to be (0,0).

Parameters
widthThe viewport width
heightThe viewport height
fieldOfViewThe field of view of the height, in degrees
Returns
true if initialization was successful.
static std::shared_ptr<PerspectiveCamera> cugl::PerspectiveCamera::alloc ( const Rect rect,
float  fieldOfView = DEFAULT_CAMERA_FOV 
)
inlinestatic

Initializes a new PerspectiveCamera for the given viewport and field of view.

The field of view given is for the height, and is measured in degrees. The field of view for the width will be calculated according to the aspect ratio. Furthermore, the aspect ratio is derived from the viewport size.

Offseting the viewport origin has no affect on the position attribute. It only affects the coordinate conversion methods Camera#project() and Camera#unproject(). It is supposed to represent the offset of the viewport in a larger canvas.

Parameters
rectThe viewport bounding box
fieldOfViewThe field of view of the height, in degrees
Returns
true if initialization was successful.
static std::shared_ptr<PerspectiveCamera> cugl::PerspectiveCamera::alloc ( const Vec2 origin,
const Size size,
float  fieldOfView = DEFAULT_CAMERA_FOV 
)
inlinestatic

Initializes a new PerspectiveCamera for the given viewport and field of view.

The field of view given is for the height, and is measured in degrees. The field of view for the width will be calculated according to the aspect ratio. Furthermore, the aspect ratio is derived from the viewport size.

Offseting the viewport origin has no affect on the position attribute. It only affects the coordinate conversion methods Camera#project() and Camera#unproject(). It is supposed to represent the offset of the viewport in a larger canvas.

Parameters
originThe viewport offset
sizeThe viewport size
fieldOfViewThe field of view of the height, in degrees
Returns
true if initialization was successful.
static std::shared_ptr<PerspectiveCamera> cugl::PerspectiveCamera::alloc ( float  x,
float  y,
float  width,
float  height,
float  fieldOfView = DEFAULT_CAMERA_FOV 
)
inlinestatic

Initializes a new PerspectiveCamera for the given viewport and field of view.

The field of view given is for the height, and is measured in degrees. The field of view for the width will be calculated according to the aspect ratio. Furthermore, the aspect ratio is derived from the viewport size.

Offseting the viewport origin has no affect on the position attribute. It only affects the coordinate conversion methods Camera#project() and Camera#unproject(). It is supposed to represent the offset of the viewport in a larger canvas.

Parameters
xThe viewport x offset
yThe viewport y offset
widthThe viewport width
heightThe viewport height
fieldOfViewThe field of view of the height, in degrees
Returns
true if initialization was successful.
void cugl::PerspectiveCamera::dispose ( )
overridevirtual

Returns this camera to the denegerate one, with all matrices the identity.

Reimplemented from cugl::Camera.

float cugl::PerspectiveCamera::getFieldOfView ( ) const
inline

Returns the field of view for the given camera.

The field of view given is for the height, and is measured in degrees. The field of view for the width will be calculated according to the aspect ratio. Furthermore, the aspect ratio is derived from the viewport size.

Returns
the field of view for the given camera.
bool cugl::PerspectiveCamera::init ( const Size size,
float  fieldOfView = DEFAULT_CAMERA_FOV 
)
inline

Initializes a new PerspectiveCamera for the given viewport and field of view.

The field of view given is for the height, and is measured in degrees. The field of view for the width will be calculated according to the aspect ratio. Furthermore, the aspect ratio is derived from the viewport size.

The viewport origin is assumed to be (0,0).

Parameters
sizeThe viewport size
fieldOfViewThe field of view of the height, in degrees
Returns
true if initialization was successful.
bool cugl::PerspectiveCamera::init ( float  width,
float  height,
float  fieldOfView = DEFAULT_CAMERA_FOV 
)
inline

Initializes a new PerspectiveCamera for the given viewport and field of view.

The field of view given is for the height, and is measured in degrees. The field of view for the width will be calculated according to the aspect ratio. Furthermore, the aspect ratio is derived from the viewport size.

The viewport origin is assumed to be (0,0).

Parameters
widthThe viewport width
heightThe viewport height
fieldOfViewThe field of view of the height, in degrees
Returns
true if initialization was successful.
bool cugl::PerspectiveCamera::init ( const Rect rect,
float  fieldOfView = DEFAULT_CAMERA_FOV 
)
inline

Initializes a new PerspectiveCamera for the given viewport and field of view.

The field of view given is for the height, and is measured in degrees. The field of view for the width will be calculated according to the aspect ratio. Furthermore, the aspect ratio is derived from the viewport size.

Offseting the viewport origin has no affect on the position attribute. It only affects the coordinate conversion methods Camera#project() and Camera#unproject(). It is supposed to represent the offset of the viewport in a larger canvas.

Parameters
rectThe viewport bounding box
fieldOfViewThe field of view of the height, in degrees
Returns
true if initialization was successful.
bool cugl::PerspectiveCamera::init ( const Vec2 origin,
const Size size,
float  fieldOfView = DEFAULT_CAMERA_FOV 
)
inline

Initializes a new PerspectiveCamera for the given viewport and field of view.

The field of view given is for the height, and is measured in degrees. The field of view for the width will be calculated according to the aspect ratio. Furthermore, the aspect ratio is derived from the viewport size.

Offseting the viewport origin has no affect on the position attribute. It only affects the coordinate conversion methods Camera#project() and Camera#unproject(). It is supposed to represent the offset of the viewport in a larger canvas.

Parameters
originThe viewport offset
sizeThe viewport size
fieldOfViewThe field of view of the height, in degrees
Returns
true if initialization was successful.
bool cugl::PerspectiveCamera::init ( float  x,
float  y,
float  width,
float  height,
float  fieldOfView = DEFAULT_CAMERA_FOV 
)

Initializes a new PerspectiveCamera for the given viewport and field of view.

The field of view given is for the height, and is measured in degrees. The field of view for the width will be calculated according to the aspect ratio. Furthermore, the aspect ratio is derived from the viewport size.

Offseting the viewport origin has no affect on the position attribute. It only affects the coordinate conversion methods Camera#project() and Camera#unproject(). It is supposed to represent the offset of the viewport in a larger canvas.

Parameters
xThe viewport x offset
yThe viewport y offset
widthThe viewport width
heightThe viewport height
fieldOfViewThe field of view of the height, in degrees
Returns
true if initialization was successful.
void cugl::PerspectiveCamera::set ( const Size size,
float  fieldOfView = DEFAULT_CAMERA_FOV 
)
inline

Sets this PerspectiveCamera to have the given viewport and field of view.

The field of view given is for the height, and is measured in degrees. The field of view for the width will be calculated according to the aspect ratio. Furthermore, the aspect ratio is derived from the viewport size.

The viewport origin is assumed to be (0,0).

Parameters
sizeThe viewport size
fieldOfViewThe field of view of the height, in degrees
void cugl::PerspectiveCamera::set ( float  width,
float  height,
float  fieldOfView = DEFAULT_CAMERA_FOV 
)
inline

Sets this PerspectiveCamera to have the given viewport and field of view.

The field of view given is for the height, and is measured in degrees. The field of view for the width will be calculated according to the aspect ratio. Furthermore, the aspect ratio is derived from the viewport size.

The viewport origin is assumed to be (0,0).

Parameters
widthThe viewport width
heightThe viewport height
fieldOfViewThe field of view of the height, in degrees
void cugl::PerspectiveCamera::set ( const Rect rect,
float  fieldOfView = DEFAULT_CAMERA_FOV 
)
inline

Sets this PerspectiveCamera to have the given viewport and field of view.

The field of view given is for the height, and is measured in degrees. The field of view for the width will be calculated according to the aspect ratio. Furthermore, the aspect ratio is derived from the viewport size.

Offseting the viewport origin has no affect on the position attribute. It only affects the coordinate conversion methods Camera#project() and Camera#unproject(). It is supposed to represent the offset of the viewport in a larger canvas.

Parameters
rectThe viewport bounding box
fieldOfViewThe field of view of the height, in degrees
void cugl::PerspectiveCamera::set ( const Vec2 origin,
const Size size,
float  fieldOfView = DEFAULT_CAMERA_FOV 
)
inline

Sets this PerspectiveCamera to have the given viewport and field of view.

The field of view given is for the height, and is measured in degrees. The field of view for the width will be calculated according to the aspect ratio. Furthermore, the aspect ratio is derived from the viewport size.

Offseting the viewport origin has no affect on the position attribute. It only affects the coordinate conversion methods Camera#project() and Camera#unproject(). It is supposed to represent the offset of the viewport in a larger canvas.

Parameters
originThe viewport offset
sizeThe viewport size
fieldOfViewThe field of view of the height, in degrees
void cugl::PerspectiveCamera::set ( float  x,
float  y,
float  width,
float  height,
float  fieldOfView = DEFAULT_CAMERA_FOV 
)

Sets this PerspectiveCamera to have the given viewport and field of view.

The field of view given is for the height, and is measured in degrees. The field of view for the width will be calculated according to the aspect ratio. Furthermore, the aspect ratio is derived from the viewport size.

Offseting the viewport origin has no affect on the position attribute. It only affects the coordinate conversion methods Camera#project() and Camera#unproject(). It is supposed to represent the offset of the viewport in a larger canvas.

Parameters
xThe viewport x offset
yThe viewport y offset
widthThe viewport width
heightThe viewport height
fieldOfViewThe field of view of the height, in degrees
void cugl::PerspectiveCamera::setFieldOfView ( float  fov)

Sets the field of view for the given camera.

The field of view given is for the height, and is measured in degrees. The field of view for the width will be calculated according to the aspect ratio. Furthermore, the aspect ratio is derived from the viewport size.

Changing this value will have no effect on the underlying matrices until you call the update() method.

Parameters
fovthe field of view for the given camera.
void cugl::PerspectiveCamera::update ( )
overridevirtual

Recalculates the projection and view matrix of this camera.

Use this after you've manipulated any of the attributes of the camera.

Implements cugl::Camera.

Member Data Documentation

float cugl::PerspectiveCamera::_fieldOfView = 67
protected

The field of view of the height, in degrees

bool cugl::PerspectiveCamera::_initialized
protected

Whether or not the camera has been initialized


The documentation for this class was generated from the following file: