G3D::GCamera Class ReferenceAbstraction of a pinhole camera.
More...
#include <GCamera.h>
List of all members.
|
Public Types |
| enum | FOVDirection { HORIZONTAL,
VERTICAL
} |
Public Member Functions |
| Vector3 | convertFromUnitToNormal (const Vector3 &in, Rect2D viewport) const |
| const CoordinateFrame & | coordinateFrame () const |
| void | deserialize (class BinaryInput &bi) |
| float | farPlaneZ () const |
| GCamera::Frustum | frustum (const Rect2D &viewport) const |
| void | frustum (const Rect2D &viewport, GCamera::Frustum &f) const |
| | GCamera () |
| void | getClipPlanes (const Rect2D &viewport, Array< Plane > &outClip) const |
| void | getCoordinateFrame (CoordinateFrame &c) const |
| void | getFarViewportCorners (const class Rect2D &viewport, Vector3 &outUR, Vector3 &outUL, Vector3 &outLL, Vector3 &outLR) const |
| void | getFieldOfView (float &angle, FOVDirection &direction) const |
| void | getNearViewportCorners (const class Rect2D &viewport, Vector3 &outUR, Vector3 &outUL, Vector3 &outLL, Vector3 &outLR) const |
| void | getProjectUnitMatrix (const Rect2D &viewport, Matrix4 &P) const |
| float | imagePlaneDepth () const |
| void | lookAt (const Vector3 &position, const Vector3 &up=Vector3::unitY()) |
| float | nearPlaneZ () const |
| Vector3 | project (const G3D::Vector3 &point, const class Rect2D &viewport) const |
| Vector3 | projectUnit (const G3D::Vector3 &point, const class Rect2D &viewport) const |
| void | serialize (class BinaryOutput &bo) const |
| void | setCoordinateFrame (const CoordinateFrame &c) |
| void | setFarPlaneZ (float z) |
| void | setFieldOfView (float angle, FOVDirection direction) |
| void | setNearPlaneZ (float z) |
| void | setPosition (const Vector3 &t) |
| Vector3 | unproject (const Vector3 &v, const Rect2D &viewport) const |
| Vector3 | unprojectUnit (const Vector3 &v, const Rect2D &viewport) const |
| float | viewportHeight (const class Rect2D &viewport) const |
| float | viewportWidth (const class Rect2D &viewport) const |
| Ray | worldRay (float x, float y, const class Rect2D &viewport) const |
| float | worldToScreenSpaceArea (float area, float z, const class Rect2D &viewport) const |
| virtual | ~GCamera () |
Classes |
| class | Frustum |
Detailed Description
Abstraction of a pinhole camera.
The area a camera sees is called a frustum. It is bounded by the near plane, the far plane, and the sides of the view frame projected into the scene. It has the shape of a pyramid with the top cut off.
Cameras can project points from 3D to 2D. The "unit" projection matches OpenGL. It maps the entire view frustum to a cube of unit radius (i.e., edges of length 2) centered at the origin. The non-unit projection then maps that cube to the specified pixel viewport in X and Y and the range [0, 1] in Z. The projection is reversable as long as the projected Z value is known.
All viewport arguments are the pixel bounds of the viewport-- e.g., RenderDevice::viewport().
Member Enumeration Documentation
Stores the direction of the field of view.
- Enumerator:
-
Constructor & Destructor Documentation
| G3D::GCamera::GCamera |
( |
|
) |
|
| virtual G3D::GCamera::~GCamera |
( |
|
) |
[virtual] |
Member Function Documentation
Converts projected points from OpenGL standards (-1, 1) to normal 3D coordinate standards (0, 1).
Returns the current coordinate frame.
| void G3D::GCamera::deserialize |
( |
class BinaryInput & |
bi |
) |
|
| float G3D::GCamera::farPlaneZ |
( |
|
) |
const [inline] |
Returns a negative z-value.
Returns the world space view frustum, which is a truncated pyramid describing the volume of space seen by this camera.
| void G3D::GCamera::getClipPlanes |
( |
const Rect2D & |
viewport, |
|
|
Array< Plane > & |
outClip | |
|
) |
| | const |
Returns the clipping planes of the frustum, in world space.
The planes have normals facing into the view frustum.
The plane order is guaranteed to be: Near, Right, Left, Top, Bottom, [Far]
If the far plane is at infinity, the resulting array will have 5 planes, otherwise there will be 6.
The viewport is used only to determine the aspect ratio of the screen; the absolute dimensions and xy values don't matter.
Sets c to the camera's coordinate frame.
Returns the world space 3D viewport corners.
These are at the Far clipping plane. The corners are constructed from the nearPlaneZ, farPlaneZ, viewportWidth, and viewportHeight. "left" and "right" are from the GCamera's perspective.
| void G3D::GCamera::getFieldOfView |
( |
float & |
angle, |
|
|
FOVDirection & |
direction | |
|
) |
| | const [inline] |
Returns the current field of view angle and direction.
Returns the world space 3D viewport corners.
These are at the near clipping plane. The corners are constructed from the nearPlaneZ, viewportWidth, and viewportHeight. "left" and "right" are from the GCamera's perspective.
| void G3D::GCamera::getProjectUnitMatrix |
( |
const Rect2D & |
viewport, |
|
|
Matrix4 & |
P | |
|
) |
| | const |
Sets P equal to the camera's projection matrix.
| float G3D::GCamera::imagePlaneDepth |
( |
|
) |
const |
Returns the image plane depth, assumes imagePlane is the same as the near clipping plane.
returns a positive number.
| void G3D::GCamera::lookAt |
( |
const Vector3 & |
position, |
|
|
const Vector3 & |
up = Vector3::unitY() | |
|
) |
| | |
Rotate the camera in place to look at the target.
Does not persistently look at that location when the camera moves; i.e., if you move the camera and still want it to look at the old target, you must call lookAt again after moving the camera.)
| float G3D::GCamera::nearPlaneZ |
( |
|
) |
const [inline] |
Returns a negative z-value.
Projects a world space point onto a width x height screen.
The returned coordinate uses pixmap addressing: x = right and y = down. The resulting z value is 0 at the near plane, 1 at the far plane, and is a linear compression of unit cube projection.
If the point is behind the camera, Vector3::inf() is returned.
Projects a world space point onto a unit cube.
The resulting x,y,z values range between -1 and 1, where z is -1 at the near plane and 1 at the far plane and varies hyperbolically in between.
If the point is behind the camera, Vector3::inf() is returned.
| void G3D::GCamera::serialize |
( |
class BinaryOutput & |
bo |
) |
const |
Read and Write camera parameters.
Sets a new coordinate frame for the camera.
| void G3D::GCamera::setFarPlaneZ |
( |
float |
z |
) |
[inline] |
Sets a new value for the far clipping plane Expects a negative value.
| void G3D::GCamera::setFieldOfView |
( |
float |
angle, |
|
|
FOVDirection |
direction | |
|
) |
| | |
Sets the vertical field of view, in radians.
The initial angle is toRadians(55). Must specify the direction of the angle
| void G3D::GCamera::setNearPlaneZ |
( |
float |
z |
) |
[inline] |
Sets a new value for the near clipping plane Expects a negative value.
| void G3D::GCamera::setPosition |
( |
const Vector3 & |
t |
) |
|
Gives the world-space coordinates of screen space point v, where v.x is in pixels from the left, v.y is in pixels from the top, and v.z is on the range 0 (near plane) to 1 (far plane).
Gives the world-space coordinates of unit cube point v, where v varies from -1 to 1 on all axes.
The unproject first transforms the point into a pixel location for the viewport, then calls unproject
| float G3D::GCamera::viewportHeight |
( |
const class Rect2D & |
viewport |
) |
const |
Returns the camera space height of the viewport at the near plane.
| float G3D::GCamera::viewportWidth |
( |
const class Rect2D & |
viewport |
) |
const |
Returns the camera space width of the viewport at the near plane.
| Ray G3D::GCamera::worldRay |
( |
float |
x, |
|
|
float |
y, |
|
|
const class Rect2D & |
viewport | |
|
) |
| | const |
Returns the world space ray passing through the center of pixel (x, y) on the image plane.
The pixel x and y axes are opposite the 3D object space axes: (0,0) is the upper left corner of the screen. They are in viewport coordinates, not screen coordinates.
The ray origin is at the origin. To start it at the image plane, move it forward by imagePlaneDepth/ray.direction.z
Integer (x, y) values correspond to the upper left corners of pixels. If you want to cast rays through pixel centers, add 0.5 to x and y.
| float G3D::GCamera::worldToScreenSpaceArea |
( |
float |
area, |
|
|
float |
z, |
|
|
const class Rect2D & |
viewport | |
|
) |
| | const |
Returns the pixel area covered by a shape of the given world space area at the given z value (z must be negative).
The documentation for this class was generated from the following file:
Generated on Thu Aug 2 11:40:45 2007 for G3D by
1.5.2
Hosted by
|