'\"! tbl | mmdoc '\"macro stdmacro .ie n \{\ . ds Cr \fB . ds Cb \fB .\} .el \{\ . ds Cr \f7 . ds Cb \f8 .\} .TH SbViewVolume(3IV) .SH NAME SbViewVolume \(em 3D viewing volume class .SH INHERITS FROM SbViewVolume .SH SYNOPSIS .ps -1 \*(Cr#include .sp .in 0.5i \*(Crenum \*(CbProjectionType\*(Cr { .in 1i .ta 28m .in 1.5i+28n .ti 1i .ta 28m .ds Pt \*(CbSbViewVolume::ORTHOGRAPHIC\f1 .ie \w'\*(Pt'>=28n \{\ .ne 3 \*(Pt .ti 1i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} Orthographic projection .br .in 1.5i+28n .ti 1i .ta 28m .ds Pt \*(CbSbViewVolume::PERSPECTIVE\f1 .ie \w'\*(Pt'>=28n \{\ .ne 3 \*(Pt .ti 1i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} Perspective projection .br .in 0.5i \*(Cr} .sp .in 1i \f1Methods from class SbViewVolume: .in 0.5i .sp .ta 20m .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Cr .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbSbViewVolume\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Cr .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cb~SbViewVolume\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetMatrices\*(Cr(SbMatrix &affine, SbMatrix &proj) const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbMatrix .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetMatrix\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbMatrix .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetCameraSpaceMatrix\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbprojectPointToLine\*(Cr(const SbVec2f &pt, SbLine &line) const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbprojectPointToLine\*(Cr(const SbVec2f &pt, SbVec3f &line0, SbVec3f &line1) const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbprojectToScreen\*(Cr(const SbVec3f &src, SbVec3f &dst) const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbPlane .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetPlane\*(Cr(float distFromEye) const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbVec3f .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetSightPoint\*(Cr(float distFromEye) const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbVec3f .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetPlanePoint\*(Cr(float distFromEye, const SbVec2f &normPoint) const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbRotation .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetAlignRotation\*(Cr(SbBool rightAngleOnly = FALSE) const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crfloat .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetWorldToScreenScale\*(Cr(const SbVec3f &worldCenter, float normRadius) const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbVec2f .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbprojectBox\*(Cr(const SbBox3f &box) const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbViewVolume .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbnarrow\*(Cr(float left, float bottom, float right, float top) const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbViewVolume .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbnarrow\*(Cr(const SbBox3f &box) const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbortho\*(Cr(float left, float right, float bottom, float top, float near, float far) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbperspective\*(Cr(float fovy, float aspect, float near, float far) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbrotateCamera\*(Cr(const SbRotation &q) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbtranslateCamera\*(Cr(const SbVec3f &v) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbVec3f .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbzVector\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbViewVolume .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbzNarrow\*(Cr(float near, float far) const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbscale\*(Cr(float factor) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbscaleWidth\*(Cr(float ratio) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbscaleHeight\*(Cr(float ratio) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrProjectionType .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetProjectionType\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crconst SbVec3f & .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetProjectionPoint\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crconst SbVec3f & .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetProjectionDirection\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crfloat .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetNearDist\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crfloat .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetWidth\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crfloat .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetHeight\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crfloat .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetDepth\*(Cr() const .sp .SH DESCRIPTION Class used to represent a 3D viewing volume. This class is used to represent viewing frusta and picking volumes. For perspective projection, the view volume is a frustum. For orthographic (parallel) projection, \&the view volume is a rectangular prism. .SH METHODS .ta 20m .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Cr .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbSbViewVolume\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Cr .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cb~SbViewVolume\*(Cr() .br .in 1i \f1Constructor and destructor. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetMatrices\*(Cr(SbMatrix &affine, SbMatrix &proj) const .br .in 1i \f1Returns two matrices corresponding to the view volume. The first is a viewing matrix, which is guaranteed to be an affine transformation. The second is suitable for use as a projection matrix in OpenGL. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbMatrix .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetMatrix\*(Cr() const .br .in 1i \f1Like the method above, but returns the affine and projection parts together in one matrix (i.e., \*(Cbaffine.multRight( proj )\f1 ). .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbMatrix .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetCameraSpaceMatrix\*(Cr() const .br .in 1i \f1Returns a matrix that transforms the view volume into camera space: it translates the view volume so the viewpoint is at the origin, and rotates it so the view direction is along the negative z axis. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbprojectPointToLine\*(Cr(const SbVec2f &pt, SbLine &line) const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbprojectPointToLine\*(Cr(const SbVec2f &pt, SbVec3f &line0, SbVec3f &line1) const .br .in 1i \f1Maps a 2D point (in 0 <= x,y <= 1) to a 3D line. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbprojectToScreen\*(Cr(const SbVec3f &src, SbVec3f &dst) const .br .in 1i \f1Maps the 3D point in world coordinates to a 2D point in normalized screen coordinates (0 <= x,y,z <= 1). The z-screen coordinate represents the homogenized z coordinate which goes (nonlinearly) from 0 at \&the near clipping plane to 1 at the far clipping plane. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbPlane .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetPlane\*(Cr(float distFromEye) const .br .in 1i \f1Returns a plane parallel to the near (or far) plane of the view volume at a given distance from the projection point (eye). .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbVec3f .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetSightPoint\*(Cr(float distFromEye) const .br .in 1i \f1Returns the point along the line of sight at the given distance from the projection point (eye). .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbVec3f .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetPlanePoint\*(Cr(float distFromEye, const SbVec2f &normPoint) const .br .in 1i \f1Returns the projection of a given point in normalized screen coordinates (see \*(CbprojectToScreen()\f1) onto the plane parallel to the near plane that is at \*(CrdistFromEye\f1 units from the eye. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbRotation .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetAlignRotation\*(Cr(SbBool rightAngleOnly = FALSE) const .br .in 1i \f1Returns a rotation that would align a viewed object so that its positive x-axis (of its object space) is to the right in the view and its positive y-axis is up. If \*(CrrightAngleOnly\f1 is TRUE, it will come as close as it \&can to this goal by using only 90 degree rotations. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crfloat .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetWorldToScreenScale\*(Cr(const SbVec3f &worldCenter, float normRadius) const .br .in 1i \f1Returns a scale factor that would scale a unit sphere centered at \*(CrworldCenter\f1 so that it would appear to have the given radius in normalized screen coordinates when projected onto the near plane. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbVec2f .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbprojectBox\*(Cr(const SbBox3f &box) const .br .in 1i \f1Projects the given 3D bounding box onto the near plane and returns the size (in normalized screen coordinates) of the rectangular region that encloses it. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbViewVolume .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbnarrow\*(Cr(float left, float bottom, float right, float top) const .br .in 1i \f1Given a view volume, narrows the view to the given sub-rectangle of the near plane. The coordinates of the rectangle are between 0 and 1, where (0,0) is the lower-left corner of the near plane and (1,1) \&is the upper-right corner. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbViewVolume .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbnarrow\*(Cr(const SbBox3f &box) const .br .in 1i \f1Narrows a view volume by the given box. The box must lie inside the unit cube, and the view will be shrunk according to the size of the box. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbortho\*(Cr(float left, float right, float bottom, float top, float near, float far) .br .in 1i \f1Sets up an orthographic view volume with the given sides. The parameters are the same as for the OpenGL \*(CbglOrtho()\f1 routine. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbperspective\*(Cr(float fovy, float aspect, float near, float far) .br .in 1i \f1Sets up a perspective view volume with the given field of view and aspect ratio. The parameters are the same as for the OpenGL \*(CbgluPerspective()\f1 routine, except that the field of view angle is specified in radians. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbrotateCamera\*(Cr(const SbRotation &q) .br .in 1i \f1Rotate the camera view direction. Note that this accomplishes the reverse of doing an OpenGL \*(CbglRotate()\f1 command after defining a camera, which rotates the scene viewed by the camera. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbtranslateCamera\*(Cr(const SbVec3f &v) .br .in 1i \f1Translate the camera viewpoint. Note that this accomplishes the reverse of doing an OpenGL \*(CbglTranslate()\f1 command after defining a camera, which translates the scene viewed by the camera. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbVec3f .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbzVector\*(Cr() const .br .in 1i \f1Returns the positive z axis in eye space. In this coordinate system, the z value of the near plane should be GREATER than the z value of the far plane. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbViewVolume .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbzNarrow\*(Cr(float near, float far) const .br .in 1i \f1Returns a narrowed view volume which contains as tightly as possible the given interval on the z axis (in eye space). The returned view volume will never be larger than the current volume, however. \*(Crnear\f1 and \*(Crfar\f1 \&are given in terms of \*(CbzVector()\f1: this means that \*(Crnear\f1 > \*(Crfar\f1 must hold. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbscale\*(Cr(float factor) .br .in 1i \f1Scales width and height of view volume by given factor. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbscaleWidth\*(Cr(float ratio) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbscaleHeight\*(Cr(float ratio) .br .in 1i \f1Scales view volume to be the given ratio of its current width or height, leaving the resulting view volume centered about the same point (in the near plane) as the current one. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrProjectionType .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetProjectionType\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crconst SbVec3f & .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetProjectionPoint\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crconst SbVec3f & .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetProjectionDirection\*(Cr() const .br .in 1i \f1Returns projection information. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crfloat .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetNearDist\*(Cr() const .br .in 1i \f1Returns distance from projection point to near plane. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crfloat .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetWidth\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crfloat .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetHeight\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crfloat .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetDepth\*(Cr() const .br .in 1i \f1Returns bounds of viewing frustum. .sp .in 0.5i .SH SEE ALSO \*(CbSbVec3f, SbVec2f, SbBox3f, SbMatrix, SbRotation