#include <Inventor/nodes/SoCamera.h>
Inheritance diagram for SoCamera::
Public Types | |
enum | ViewportMapping { CROP_VIEWPORT_FILL_FRAME, CROP_VIEWPORT_LINE_FRAME, CROP_VIEWPORT_NO_FRAME, ADJUST_CAMERA, LEAVE_ALONE } |
enum | StereoMode { MONOSCOPIC, LEFT_VIEW, RIGHT_VIEW } |
Public Methods | |
void | pointAt (const SbVec3f &targetpoint) |
void | pointAt (const SbVec3f &targetpoint, const SbVec3f &upvector) |
virtual void | scaleHeight (float scalefactor)=0 |
virtual SbViewVolume | getViewVolume (float useaspectratio=0.0f) const=0 |
void | viewAll (SoNode *const sceneroot, const SbViewportRegion &vpregion, const float slack=1.0f) |
void | viewAll (SoPath *const path, const SbViewportRegion &vpregion, const float slack=1.0f) |
SbViewportRegion | getViewportBounds (const SbViewportRegion ®ion) const |
void | setStereoMode (StereoMode mode) |
StereoMode | getStereoMode (void) const |
void | setStereoAdjustment (float adjustment) |
float | getStereoAdjustment (void) const |
void | setBalanceAdjustment (float adjustment) |
float | getBalanceAdjustment (void) const |
virtual void | doAction (SoAction *action) |
virtual void | callback (SoCallbackAction *action) |
virtual void | GLRender (SoGLRenderAction *action) |
virtual void | getBoundingBox (SoGetBoundingBoxAction *action) |
virtual void | handleEvent (SoHandleEventAction *action) |
virtual void | rayPick (SoRayPickAction *action) |
virtual void | getPrimitiveCount (SoGetPrimitiveCountAction *action) |
Static Public Methods | |
void | initClass (void) |
Public Attributes | |
SoSFEnum | viewportMapping |
SoSFVec3f | position |
SoSFRotation | orientation |
SoSFFloat | aspectRatio |
SoSFFloat | nearDistance |
SoSFFloat | farDistance |
SoSFFloat | focalDistance |
Protected Methods | |
SoCamera (void) | |
virtual | ~SoCamera () |
virtual void | viewBoundingBox (const SbBox3f &box, float aspect, float slack)=0 |
virtual void | jitter (int numpasses, int curpass, const SbViewportRegion &vpreg, SbVec3f &jitteramount) const |
To be able to view a scene, one needs to have a camera in the scene graph. A camera node will set up the projection and viewing matrices for rendering of the geometry in the scene.
This node just defines the abstract interface by collecting common fields all camera type nodes needs. Use of the non-abstract subclasses within our scene graph.
Note that the viewer components of the GUI glue libraries of Coin (SoXt, SoQt, SoBe, etc) will automatically insert a camera into a scene graph is none has been defined.
|
Enumerates the available possibilities for how the render frame should map the viewport. |
|
Enumerates the possible stereo modes. |
|
Constructor. |
|
Destructor. |
|
Sets up initialization for data common to all instances of this class, like submitting necessary information to the Coin type system. Reimplemented from SoNode. Reimplemented in SoPerspectiveCamera, and SoOrthographicCamera. |
|
Reorients the camera so that it points towards targetpoint. The positive y-axis is used as the up vector of the camera, unless the new camera direction is parallel to this axis, in which case the positive z-axis will be used instead. |
|
Reorients the camera so that it points towards targetpoint, using upvector as the camera up vector. This method is an extension versus the Open Inventor API. |
|
Sets a scalefactor for the height of the camera viewport. What "viewport height" means exactly in this context depends on the camera model. See documentation in subclasses. Reimplemented in SoPerspectiveCamera, and SoOrthographicCamera. |
|
Returns total view volume covered by the camera under the current settings. This view volume is not adjusted to account for viewport mapping. If you want the same view volume as the one used during rendering, you should do something like this:
SbViewVolume vv; float aspectratio = myviewport.getViewportAspectRatio(); switch (camera->viewportMapping.getValue()) { case SoCamera::CROP_VIEWPORT_FILL_FRAME: case SoCamera::CROP_VIEWPORT_LINE_FRAME: case SoCamera::CROP_VIEWPORT_NO_FRAME: vv = camera->getViewVolume(0.0f); break; case SoCamera::ADJUST_CAMERA: vv = camera->getViewVolume(aspectratio); if (aspectratio < 1.0f) vv.scale(1.0f / aspectratio); break; case SoCamera::LEAVE_ALONE: vv = camera->getViewVolume(0.0f); break; default: assert(0 && "unknown viewport mapping"); break; } Also, for the CROPPED viewport mappings, the viewport might be changed if the viewport aspect ratio is not equal to the camera aspect ratio. See SoCamera::getView() to see how this is done. Reimplemented in SoPerspectiveCamera, and SoOrthographicCamera. |
|
Position the camera so that all geometry of the scene from sceneroot is contained in the view volume of the camera, while keeping the camera orientation constant. Finds the bounding box of the scene and calls SoCamera::viewBoundingBox(). |
|
Position the camera so all geometry of the scene in path is contained in the view volume of the camera. Finds the bounding box of the scene and calls SoCamera::viewBoundingBox(). |
|
Based in the SoCamera::viewportMapping setting, convert the values of region to the viewport region we will actually render into. |
|
Sets the stereo mode. |
|
Returns the stereo mode. |
|
Sets the stereo adjustment. |
|
Returns the stereo adjustment. |
|
Sets the stereo balance adjustment. |
|
Returns the stereo balance adjustment. |
|
Overloaded to set up the viewing and projection matrices. Reimplemented from SoNode. |
|
Action method for SoCallbackAction. Simply updates the state according to how the node behaves for the render action, so the application programmer can use the SoCallbackAction for extracting information about the scene graph. Reimplemented from SoNode. |
|
Action method for the SoGLRenderAction. This is called during rendering traversals. Nodes influencing the rendering state in any way or who wants to throw geometry primitives at OpenGL overrides this method. Reimplemented from SoNode. |
|
Action method for the SoGetBoundingBoxAction. Calculates bounding box and center coordinates for node and modifies the values of the action to encompass the bounding box for this node and to shift the center point for the scene more towards the one for this node. Nodes influencing how geometry nodes calculates their bounding box also overrides this method to change the relevant state variables. Reimplemented from SoNode. |
|
Picking actions can be triggered during handle event action traversal, and to do picking we need to know the camera state.
Reimplemented from SoNode. |
|
Overloaded to calculate the coordinates of the ray within the current camera settings. Reimplemented from SoNode. |
|
The number of primitives used to render a shape can change according to the shape's distance to the camera, so we need to overload this method from the superclass to modify the traversal state settings for the camera view. Reimplemented from SoNode. |
|
Convenience method for setting up the camera definition to cover the given bounding box with the given aspect ratio. Multiplies the exact dimensions with a slack factor to have some space between the rendered model and the borders of the rendering area. If you define your own camera node class, be aware that this method should not set the orientation field of the camera, only the position, focal distance and near and far clipping planes. Reimplemented in SoPerspectiveCamera, and SoOrthographicCamera. |
|
"Jitter" the camera according to the current rendering pass (curpass), to get an antialiased rendering of the scene when doing multipass rendering. |
|
Set up how the render frame should map the viewport. The default is SoCamera::ADJUST_CAMERA. |
|
Camera position. Defaults to <0,0,1>. |
|
Camera orientation specified as a rotation value from the default orientation where the camera is pointing along the negative z-axis, with "up" along the positive y-axis. |
|
Aspect ratio for the camera (i.e. width / height). Defaults to 1.0. |
|
Distance from camera position to the near clipping plane. Defaults to 1.0. The default behavior of the GUI viewer components is to automatically update this value for the scene camera according to the scene bounding box. Ditto for the far clipping plane. |
|
Distance from camera position to the far clipping plane. Defaults to 10.0. See also documentation of SoCamera::nearDistance. |
|
Distance from camera position to center of scene. |