reference

This documentation is automatically generated from the openFrameworks source code using doxygen and refers to the most recent release, version 0.12.0.

A basic camera object for interacting with objects in 3D space. More...

#include <ofCamera.h>

Inheritance diagram for ofCamera:
ofNode ofEasyCam

Public Member Functions

void drawFrustum (const ofRectangle &viewport) const
 Draw a visual representation of the camera's frustum.
 
void drawFrustum () const
 
Constructor and Destructor
 ofCamera ()
 Construct a default camera.
 
virtual ~ofCamera ()
 Destroy the camera.
 
Camera Settings
void setFov (float f)
 Set the field of view for a perspective camera.
 
void setNearClip (float f)
 
void setFarClip (float f)
 
void setLensOffset (const glm::vec2 &lensOffset)
 Set the "lens offset" applied to this camera.
 
void setAspectRatio (float aspectRatio)
 Set the recommended aspect ratio for a perspective camera.
 
void setForceAspectRatio (bool forceAspectRatio)
 Set whether or not the aspect ratio of this camera is forced to a non-default setting.
 
float getFov () const
 Get the camera's field of view, in degrees.
 
float getNearClip () const
 
float getFarClip () const
 
glm::vec2 getLensOffset () const
 Get the "lens offset" applied to this camera, encoded as an glm::vec2.
 
bool getForceAspectRatio () const
 Get the boolean state which indicates whether the aspect ratio of this camera is forced to a non-default setting.
 
float getAspectRatio () const
 Get the aspect ratio of this camera's viewport.
 
OpenGL Setup
void setupPerspective (bool vFlip=true, float fov=60, float nearDist=0, float farDist=0, const glm::vec2 &lensOffset=glm::vec2(0.0f, 0.0f))
 
void setupOffAxisViewPortal (const glm::vec3 &topLeft, const glm::vec3 &bottomLeft, const glm::vec3 &bottomRight)
 
void setVFlip (bool vflip)
 
bool isVFlipped () const
 
void enableOrtho ()
 
void disableOrtho ()
 
bool getOrtho () const
 
float getImagePlaneDistance (const ofRectangle &viewport=ofRectangle()) const
 
Rendering
virtual void begin ()
 Begins rendering with the camera.
 
virtual void begin (const ofRectangle &viewport)
 
virtual void end ()
 Ends rendering with the camera.
 
OpenGL Matrix
glm::mat4 getProjectionMatrix () const
 Access the projection matrix.
 
glm::mat4 getProjectionMatrix (const ofRectangle &viewport) const
 
glm::mat4 getModelViewMatrix () const
 Access the model view matrix.
 
glm::mat4 getModelViewProjectionMatrix (const ofRectangle &viewport) const
 
glm::mat4 getModelViewProjectionMatrix () const
 
Coordinate Conversion
glm::vec3 worldToScreen (glm::vec3 WorldXYZ, const ofRectangle &viewport) const
 Obtain the screen coordinates of a point in the 3D world.
 
glm::vec3 worldToScreen (glm::vec3 WorldXYZ) const
 
glm::vec3 screenToWorld (glm::vec3 ScreenXYZ, const ofRectangle &viewport) const
 Obtain the coordinates, in the 3D world, of a 2D point presumed to be on your screen.
 
glm::vec3 screenToWorld (glm::vec3 ScreenXYZ) const
 
glm::vec3 worldToCamera (glm::vec3 WorldXYZ, const ofRectangle &viewport) const
 
glm::vec3 worldToCamera (glm::vec3 WorldXYZ) const
 
glm::vec3 cameraToWorld (glm::vec3 CameraXYZ, const ofRectangle &viewport) const
 
glm::vec3 cameraToWorld (glm::vec3 CameraXYZ) const
 
Renderer
void setRenderer (std::shared_ptr< ofBaseRenderer > renderer)
 
- Public Member Functions inherited from ofNode
void setParent (ofNode &parent, bool bMaintainGlobalTransform=false)
 Set parent for the node. The node will inherit transformations from parent.
 
void clearParent (bool bMaintainGlobalTransform=false)
 Remove parent node linking.
 
ofNodegetParent () const
 Get the parent node of this node.
 
glm::vec3 getPosition () const
 Get node's local position as a 3D vector.
 
float getX () const
 Get node's local x position.
 
float getY () const
 Get node's local y position.
 
float getZ () const
 Get node's local z position.
 
glm::vec3 getXAxis () const
 Get the node's local x axis as 3d vector.
 
glm::vec3 getYAxis () const
 Get the node's local y axis as 3d vector.
 
glm::vec3 getZAxis () const
 Get the node's local z axis as 3d vector.
 
glm::vec3 getSideDir () const
 Get direction of node's side aka local x axis, as 3d vector.
 
glm::vec3 getLookAtDir () const
 Get direction the node looks at aka local -z axis, as 3d vector.
 
glm::vec3 getUpDir () const
 Get direction of node's top aka local y axis, as 3d vector.
 
 OF_DEPRECATED_MSG ("Use Deg/Rad versions.", float getPitch() const)
 
 OF_DEPRECATED_MSG ("Use Deg/Rad versions.", float getHeading() const)
 
 OF_DEPRECATED_MSG ("Use Deg/Rad versions.", float getRoll() const)
 
float getPitchDeg () const
 Get pitch of node, aka the rotation along local x axis.
 
float getHeadingDeg () const
 Get heading of node, aka the rotation along local y axis.
 
float getRollDeg () const
 Get roll of node, aka the rotation along local z axis.
 
float getPitchRad () const
 Get pitch of node, aka the rotation along local x axis.
 
float getHeadingRad () const
 Get heading of node, aka the rotation along local y axis.
 
float getRollRad () const
 Get roll of node, aka the rotation along local z axis.
 
glm::quat getOrientationQuat () const
 Get the local orientation of the node as a quaternion.
 
 OF_DEPRECATED_MSG ("Use the Deg/Rad version.", glm::vec3 getOrientationEuler() const)
 
glm::vec3 getOrientationEulerDeg () const
 Get local orientation of node in degrees around x, y, and z axes.
 
glm::vec3 getOrientationEulerRad () const
 Get local orientation of node in degrees around x, y, and z axes.
 
glm::vec3 getScale () const
 Get local scale of node in xyz axes where 1 is default.
 
const glm::mat4 & getLocalTransformMatrix () const
 Get node's local transformations (position, orientation, scale).
 
glm::mat4 getGlobalTransformMatrix () const
 Get node's global transformations (position, orientation, scale).
 
glm::vec3 getGlobalPosition () const
 Get node's global position as a 3D vector.
 
glm::quat getGlobalOrientation () const
 Get the global orientation of the node as a quaternion.
 
glm::vec3 getGlobalScale () const
 Get global scale of node in xyz axes where 1 is default.
 
void setPosition (float px, float py, float pz)
 Set the local position of the node using xyz coordinates.
 
void setPosition (const glm::vec3 &p)
 Set the local position of the node using a 3D vector of coordinates.
 
void setGlobalPosition (float px, float py, float pz)
 Set the global position of the node using xyz coordinates.
 
void setGlobalPosition (const glm::vec3 &p)
 Set the global position of the node using a 3D vector of coordinates.
 
void setOrientation (const glm::quat &q)
 Set local orientation with a quaternion.
 
void setOrientation (const glm::vec3 &eulerAngles)
 Set local orientation with xyz euler angles.
 
void setGlobalOrientation (const glm::quat &q)
 Set global orientation with a quaternion.
 
void setScale (float s)
 Set local uniform scale (x, y, and z are equally scaled).
 
void setScale (float sx, float sy, float sz)
 Set local scale for xyz axes individually.
 
void setScale (const glm::vec3 &s)
 Set local scale for xyz axes individually with a 3D vector.
 
void move (float x, float y, float z)
 Move node by relative amount with xyz coordinates.
 
void move (const glm::vec3 &offset)
 Move node by relative amount with xyz as ref to 3D vector.
 
void truck (float amount)
 Move node left+right relative to current position (in local x axis).
 
void boom (float amount)
 Move node up+down relative to current position (in local y axis).
 
void dolly (float amount)
 Move node backward+forward relative to current position (in local z axis).
 
 OF_DEPRECATED_MSG ("Use the Deg/Rad version.", void tilt(float degrees))
 
void tiltDeg (float degrees)
 Tilt up+down relative to current orientation (around local x axis).
 
void tiltRad (float radians)
 Tilt up+down relative to current orientation (around local x axis).
 
 OF_DEPRECATED_MSG ("Use the Deg/Rad version.", void pan(float degrees))
 
void panDeg (float degrees)
 Rotate left+right relative to current orientation (around local y axis).
 
void panRad (float radians)
 Rotate left+right relative to current orientation (around local y axis).
 
 OF_DEPRECATED_MSG ("Use the Deg/Rad version.", void roll(float degrees))
 
void rollDeg (float degrees)
 Roll left+right relative to current orientation (around local z axis).
 
void rollRad (float radians)
 Roll left+right relative to current orientation (around local z axis).
 
void rotate (const glm::quat &q)
 Rotate relative to current orientation by quaternion.
 
 OF_DEPRECATED_MSG ("Use the Deg/Rad version.", void rotate(float degrees, const glm::vec3 &v))
 
void rotateDeg (float degrees, const glm::vec3 &v)
 Rotate relative to current orientation around arbitrary axis.
 
void rotateRad (float radians, const glm::vec3 &v)
 Rotate relative to current orientation around arbitrary axis.
 
 OF_DEPRECATED_MSG ("Use the Deg/Rad version.", void rotate(float degrees, float vx, float vy, float vz))
 
void rotateDeg (float degrees, float vx, float vy, float vz)
 Rotate relative to current orientation around arbitrary axis.
 
void rotateRad (float radians, float vx, float vy, float vz)
 Rotate relative to current orientation around arbitrary axis.
 
void rotateAround (const glm::quat &q, const glm::vec3 &point)
 Rotate relative to current orientation by quaternion around point.
 
 OF_DEPRECATED_MSG ("Use the Deg/Rad version.", void rotateAround(float degrees, const glm::vec3 &axis, const glm::vec3 &point))
 
void rotateAroundDeg (float degrees, const glm::vec3 &axis, const glm::vec3 &point)
 Rotate relative to current orientation around arbitrary axis around point.
 
void rotateAroundRad (float radians, const glm::vec3 &axis, const glm::vec3 &point)
 Rotate relative to current orientation around arbitrary axis around point.
 
void lookAt (const glm::vec3 &lookAtPosition)
 Orient node to look at point (-z axis pointing to global position).
 
void lookAt (const glm::vec3 &lookAtPosition, glm::vec3 upVector)
 Orient node to look at point (-z axis pointing to global position).
 
void lookAt (const ofNode &lookAtNode)
 Orient node to look at another node (-z axis pointing at other node).
 
void lookAt (const ofNode &lookAtNode, const glm::vec3 &upVector)
 Orient node to look at another node (-z axis pointing at other node).
 
 OF_DEPRECATED_MSG ("Use the Deg/Rad version.", void orbit(float longitude, float latitude, float radius, const glm::vec3 &centerPoint=glm::vec3(0, 0, 0)))
 
 OF_DEPRECATED_MSG ("Use the Deg/Rad version.", void orbit(float longitude, float latitude, float radius, ofNode &centerNode))
 
void orbitDeg (float longitude, float latitude, float radius, const glm::vec3 &centerPoint=glm::vec3(0, 0, 0))
 Orbit node around a global position at a specific radius.
 
void orbitDeg (float longitude, float latitude, float radius, ofNode &centerNode)
 Orbit node around another node at a specific radius.
 
void orbitRad (float longitude, float latitude, float radius, const glm::vec3 &centerPoint=glm::vec3(0, 0, 0))
 Orbit node around a global position at a specific radius.
 
void orbitRad (float longitude, float latitude, float radius, ofNode &centerNode)
 Orbit node around another node at a specific radius.
 
void transformGL (ofBaseRenderer *renderer=nullptr) const
 Set opengl renderer's modelview matrix to this nodes transform.
 
void restoreTransformGL (ofBaseRenderer *renderer=nullptr) const
 Restore opengl renderer's previous modelview transform matrix.
 
void resetTransform ()
 Reset this node's transformations, position, rotation and scale.
 
virtual void customDraw (const ofBaseRenderer *renderer) const
 If you extend ofNode and wish to change the way it draws, extend this.
 
virtual void customDraw ()
 If you extend ofNode and wish to change the way it draws, extend this.
 
virtual void draw () const
 Draw the node as a white cube with xyz axes.
 

Protected Member Functions

ofRectangle getViewport () const
 
std::shared_ptr< ofBaseRenderergetRenderer () const
 
void calcClipPlanes (const ofRectangle &viewport)
 
- Protected Member Functions inherited from ofNode
void createMatrix ()
 
void updateAxis ()
 
virtual void onPositionChanged ()
 Classes extending ofNode can override this method to get notified when the position changed.
 
virtual void onOrientationChanged ()
 Classes extending ofNode can override this methods to get notified when the orientation changed.
 
virtual void onScaleChanged ()
 Classes extending ofNode can override this methods to get notified when the scale changed.
 

Additional Inherited Members

- Protected Attributes inherited from ofNode
ofNodeparent = nullptr
 

Detailed Description

A basic camera object for interacting with objects in 3D space.

Author
Memo Akten, MSA Visuals Ltd. 2011

Constructor & Destructor Documentation

◆ ofCamera()

ofCamera::ofCamera ( )

Construct a default camera.

◆ ~ofCamera()

ofCamera::~ofCamera ( )
virtual

Destroy the camera.

Member Function Documentation

◆ begin() [1/2]

virtual void ofCamera::begin ( )
inlinevirtual

Begins rendering with the camera.

void draw() {
// Begin rendering from the camera's perspective.
camera.begin();
// Additional rendering ...
// End rendering form the camera's perspective.
camera.end();
}
virtual void draw() const
Draw the node as a white cube with xyz axes.
Definition ofNode.cpp:637
int ofGetWidth()
Definition ofAppRunner.cpp:405
int ofGetHeight()
Definition ofAppRunner.cpp:409
void ofLine(const glm::vec3 &p1, const glm::vec3 &p2)
Definition ofGraphics.cpp:925
Parameters
viewportThe camera's rendering viewport.

Reimplemented in ofEasyCam.

◆ begin() [2/2]

void ofCamera::begin ( const ofRectangle viewport)
virtual

Reimplemented in ofEasyCam.

◆ calcClipPlanes()

void ofCamera::calcClipPlanes ( const ofRectangle viewport)
protected

◆ cameraToWorld() [1/2]

glm::vec3 ofCamera::cameraToWorld ( glm::vec3  CameraXYZ) const
inline

◆ cameraToWorld() [2/2]

glm::vec3 ofCamera::cameraToWorld ( glm::vec3  CameraXYZ,
const ofRectangle viewport 
) const

◆ disableOrtho()

void ofCamera::disableOrtho ( )

◆ drawFrustum() [1/2]

void ofCamera::drawFrustum ( ) const
inline

◆ drawFrustum() [2/2]

void ofCamera::drawFrustum ( const ofRectangle viewport) const

Draw a visual representation of the camera's frustum.

Note
This will only be visible when the camera drawing its frustum is viewed through another camera.

◆ enableOrtho()

void ofCamera::enableOrtho ( )

◆ end()

void ofCamera::end ( )
virtual

Ends rendering with the camera.

◆ getAspectRatio()

float ofCamera::getAspectRatio ( ) const
inline

Get the aspect ratio of this camera's viewport.

Returns the aspect ratio of this camera's viewport. Usually this will be the ratio of the width to height of your display. Intended for perspective cameras.

Returns
The aspect ratio of this camera's viewport.

◆ getFarClip()

float ofCamera::getFarClip ( ) const
inline

◆ getForceAspectRatio()

bool ofCamera::getForceAspectRatio ( ) const
inline

Get the boolean state which indicates whether the aspect ratio of this camera is forced to a non-default setting.

Returns
A boolean: whether or not this camera's aspect ratio is set to a non-default value.

◆ getFov()

float ofCamera::getFov ( ) const
inline

Get the camera's field of view, in degrees.

Get the camera's vertical field of view, in degrees. This is only meaningful for perspective cameras.

Returns
The camera's field of view, in degrees.

◆ getImagePlaneDistance()

float ofCamera::getImagePlaneDistance ( const ofRectangle viewport = ofRectangle()) const

◆ getLensOffset()

glm::vec2 ofCamera::getLensOffset ( ) const
inline

Get the "lens offset" applied to this camera, encoded as an glm::vec2.

Ordinarily, the camera is pointed straight down the center of its view frustum. However, it is possible to orient the camera towards a location offset from the center of its frustum. This is called an "asymetric frustum" and is used (for example) in stereo views. It is acheived by applying an offset to the center of projection. This function returns the offset that has been applied, as an glm::vec2. For more information see http://www.orthostereo.com/geometryopengl.html.

Returns
The "lens offset" applied to this camera, encoded in an glm::vec2.

◆ getModelViewMatrix()

glm::mat4 ofCamera::getModelViewMatrix ( ) const

Access the model view matrix.

Returns
the current 4x4 model view matrix.

◆ getModelViewProjectionMatrix() [1/2]

glm::mat4 ofCamera::getModelViewProjectionMatrix ( ) const
inline

◆ getModelViewProjectionMatrix() [2/2]

glm::mat4 ofCamera::getModelViewProjectionMatrix ( const ofRectangle viewport) const

◆ getNearClip()

float ofCamera::getNearClip ( ) const
inline

◆ getOrtho()

bool ofCamera::getOrtho ( ) const

◆ getProjectionMatrix() [1/2]

glm::mat4 ofCamera::getProjectionMatrix ( ) const
inline

Access the projection matrix.

Returns
the current 4x4 projection matrix.

◆ getProjectionMatrix() [2/2]

glm::mat4 ofCamera::getProjectionMatrix ( const ofRectangle viewport) const

◆ getRenderer()

shared_ptr< ofBaseRenderer > ofCamera::getRenderer ( ) const
protected

◆ getViewport()

ofRectangle ofCamera::getViewport ( ) const
protected

◆ isVFlipped()

bool ofCamera::isVFlipped ( ) const

◆ screenToWorld() [1/2]

glm::vec3 ofCamera::screenToWorld ( glm::vec3  ScreenXYZ) const
inline

◆ screenToWorld() [2/2]

glm::vec3 ofCamera::screenToWorld ( glm::vec3  ScreenXYZ,
const ofRectangle viewport 
) const

Obtain the coordinates, in the 3D world, of a 2D point presumed to be on your screen.

Takes a pixel location on your screen, encoded in an glm::vec3, and returns (also as an glm::vec3) the 3D world coordinates of that point. You'll also need to specify a Z value when providing your screen point. This Z value is interpreted as a distance into or away from the screen.

Parameters
ScreenXYZA point on your screen, whose 3D world coordinates you wish to know.

◆ setAspectRatio()

void ofCamera::setAspectRatio ( float  aspectRatio)

Set the recommended aspect ratio for a perspective camera.

Sets the aspect ratio of the camera to the desired float, and forces the use of aspect ratio calculations. Currently only used with perspective cameras. The default value (and the value used with orthographic cameras) is the ratio of the viewport's width to the viewport's height.

Parameters
aspectRatioThe desired aspect ratio, e.g. 1.3333, 1.6, etc.

◆ setFarClip()

void ofCamera::setFarClip ( float  f)

◆ setForceAspectRatio()

void ofCamera::setForceAspectRatio ( bool  forceAspectRatio)

Set whether or not the aspect ratio of this camera is forced to a non-default setting.

The camera's aspect ratio, by default, is the aspect ratio of your viewport. If you have set a non-default value (with ofCamera::setAspectRatio()), you can toggle whether or not this value is applied.

Parameters
forceAspectRatioWhether or not this camera should use an aspect ratio you have set yourself.

◆ setFov()

void ofCamera::setFov ( float  f)

Set the field of view for a perspective camera.

This sets the vertical field of view for the camera, in degrees. This only operates with perspective cameras, and will have no effect with cameras in orthographic mode.

Parameters
fThe desired field of view for the camera, in degrees.

◆ setLensOffset()

void ofCamera::setLensOffset ( const glm::vec2 &  lensOffset)

Set the "lens offset" applied to this camera.

Ordinarily, the camera is pointed straight down the center of its view frustum. However, it is possible to orient the camera towards a location offset from the center of its frustum. This is called an "assymetric frustum" and is used (for example) in stereo views. It is acheived by applying an offset to the center of projection. This function sets this offset from an glm::vec2 argument. For more information see http://www.orthostereo.com/geometryopengl.html.

Parameters
lensOffsetThe "lens offset" to apply to this camera, encoded in an glm::vec2.

◆ setNearClip()

void ofCamera::setNearClip ( float  f)

◆ setRenderer()

void ofCamera::setRenderer ( std::shared_ptr< ofBaseRenderer renderer)

◆ setupOffAxisViewPortal()

void ofCamera::setupOffAxisViewPortal ( const glm::vec3 &  topLeft,
const glm::vec3 &  bottomLeft,
const glm::vec3 &  bottomRight 
)

◆ setupPerspective()

void ofCamera::setupPerspective ( bool  vFlip = true,
float  fov = 60,
float  nearDist = 0,
float  farDist = 0,
const glm::vec2 &  lensOffset = glm::vec2(0.0f, 0.0f) 
)

◆ setVFlip()

void ofCamera::setVFlip ( bool  vflip)

◆ worldToCamera() [1/2]

glm::vec3 ofCamera::worldToCamera ( glm::vec3  WorldXYZ) const
inline

◆ worldToCamera() [2/2]

glm::vec3 ofCamera::worldToCamera ( glm::vec3  WorldXYZ,
const ofRectangle viewport 
) const

◆ worldToScreen() [1/2]

glm::vec3 ofCamera::worldToScreen ( glm::vec3  WorldXYZ) const
inline

◆ worldToScreen() [2/2]

glm::vec3 ofCamera::worldToScreen ( glm::vec3  WorldXYZ,
const ofRectangle viewport 
) const

Obtain the screen coordinates of a point in the 3D world.

Takes an (X,Y,Z) point in your 3D world, encoded as an glm::vec3, and returns the location (also as an glm::vec3) where this point would appear on your (two-dimensional) display. The screen position's "Z coordinate" is set to be the same as your camera's.

Parameters
WorldXYZA 3D point in the world, whose screen coordinates you wish to know.
viewport(Optional) A viewport. The default is ofGetCurrentViewport().
Returns
An glm::vec3 containing the screen coordinates of your 3D point of interest.

The documentation for this class was generated from the following files:
  • /Users/icq4ever/Desktop/oF0120/libs/openFrameworks/3d/ofCamera.h
  • /Users/icq4ever/Desktop/oF0120/libs/openFrameworks/3d/ofCamera.cpp