#include <MDrawTraversal.h>
MDrawTraversal is a utility class for interactive drawing. The purpose of the class is to traverse through the current scene dag and provide a means of accessing a list of visible objects with respect to a given frustum specification, and application "visibility" criteria.
The additional "visibility" criteria include:
Additionally, render layer visibility checks are not performed, as these pertain to software rendering.
After traversal the list will contain leaf level nodes (shapes), which have passed the "visibility" criteria.
For the actual frustum culling, there is a choice of two culling algorithms:
The default is thus to perform leaf level culling only.
Frustum culling is performed against the bounding boxes of dag objects encountered.
API writers can derive from this class and change the filterNode() virtual method to perform custom filtering of objects during traversal. That is they will be excluded from the output list. By default this class does no additional filtering.
Public Types | |
enum | { kActiveItem, kTemplateItem } |
Item status enum. More... | |
Public Member Functions | |
MDrawTraversal () | |
virtual | ~MDrawTraversal () |
virtual MStatus | traverse () |
virtual bool | filterNode (const MDagPath &traversalItem) |
MStatus | setFrustum (const MDagPath &cameraPath, unsigned int portWidth, unsigned int portHeight) |
MStatus | setOrthoFrustum (double left, double right, double bottom, double top, double nearpt, double farpt, const MMatrix &worldXform) |
MStatus | setPerspFrustum (double fovX, double aspectXY, double nearDist, double farDist, const MMatrix &worldXform) |
MStatus | setFrustum (double left, double right, double bottom, double top, double nearpt, double farpt, const MMatrix &worldXform) |
MStatus | setFrustum (const MPoint &nearBottomLeft, const MPoint &nearBottomRight, const MPoint &nearTopLeft, const MPoint &nearTopRight, const MPoint &farBottomLeft, const MPoint &farBottomRight, const MPoint &farTopLeft, const MPoint &farTopRight, const MMatrix &worldXform) |
bool | frustumValid () const |
void | setLeafLevelCulling (bool cullAtLeafLevel) |
bool | leafLevelCulling () const |
void | enableFiltering (bool val) |
bool | filteringEnabled () const |
unsigned int | numberOfItems () const |
MStatus | itemPath (unsigned int itemNumber, MDagPath &path) const |
bool | itemHasStatus (unsigned int itemNumber, unsigned int test) const |
anonymous enum |
MDrawTraversal::MDrawTraversal | ( | ) |
Default constructor. Sets leaf level culling to be true by default, and filtering to be disabled.
MDrawTraversal::~MDrawTraversal | ( | ) | [virtual] |
Default destructor.
MStatus MDrawTraversal::traverse | ( | ) | [virtual] |
Perform traversal of the current scene from the root of the dag hierarchy. A valid frustum must be set before calling this method.
If the traversal was succesfull a list of traversal items will have been evaluated.
bool MDrawTraversal::filterNode | ( | const MDagPath & | traversalItem | ) | [virtual] |
Method to allow filtering during traversal. The traversalItem can be examined, and if it is not match the desired criteria, it will not be added to the output traversal list.
A return value of "false" will result in filtering out this item. A return value of "true" will result in regular filtering to occuring.
API writers can derive from MDrawTraversal, and implement their own filterNode() method to perform custom filtering as desired.
[in] | traversalItem | path to item to test. |
MStatus MDrawTraversal::setFrustum | ( | const MDagPath & | cameraPath, | |
unsigned int | portWidth, | |||
unsigned int | portHeight | |||
) |
Set the frustum to cull with. The frustum is based on the attributes of the camera argument provided.
Note that traversal always requries that a valid frustum to be set. There is no default frustum provided.
[in] | cameraPath | path to a valid scene camera. |
[in] | portWidth | width of the viewport to cull against. |
[in] | portHeight | height of the viewport to cull against. |
MStatus MDrawTraversal::setOrthoFrustum | ( | double | left, | |
double | right, | |||
double | bottom, | |||
double | top, | |||
double | nearpt, | |||
double | farpt, | |||
const MMatrix & | worldXform | |||
) |
Set up an orthographic view frustum to cull with. The frustum is symmetric about the vertical and horizontal.
Note that traversal always requries that a valid frustum to be set. There is no default frustum provided.
[in] | left | Left side of frustum (local space). |
[in] | right | Right side of frustum (local space). |
[in] | bottom | Bottom of frustum (local space). |
[in] | top | Top of frustum (local space). |
[in] | nearpt | Front / near point of frustum (local space). |
[in] | farpt | Back / far point of frustum (local space). |
[in] | worldXform | transformation from local to world space. |
MStatus MDrawTraversal::setPerspFrustum | ( | double | fovX, | |
double | aspectXY, | |||
double | nearDist, | |||
double | farDist, | |||
const MMatrix & | worldXform | |||
) |
Set up an perspective view frustum to cull with. The frustum is symmetric about the vertical and horizontal.
Note that traversal always requries that a valid frustum to be set. There is no default frustum provided.
[in] | fovX | Field of view in X. |
[in] | aspectXY | aspect ratio X / Y. |
[in] | nearDist | distance to near plane. |
[in] | farDist | distance to far plane. |
[in] | worldXform | transformation from local to world space. |
MStatus MDrawTraversal::setFrustum | ( | double | left, | |
double | right, | |||
double | bottom, | |||
double | top, | |||
double | nearpt, | |||
double | farpt, | |||
const MMatrix & | worldXform | |||
) |
Set up a frustum to cull with. The frustum can be asymmetric is distance about the vertial and horizontal.
Note that traversal always requries that a valid frustum to be set. There is no default frustum provided.
[in] | left | Left side of frustum (local space). |
[in] | right | Right side of frustum (local space). |
[in] | bottom | Bottom of frustum (local space). |
[in] | top | Top of frustum (local space). |
[in] | nearpt | Front / near point of frustum (local space). |
[in] | farpt | Back / far point of frustum (local space). |
[in] | worldXform | transformation from local to world space. |
MStatus MDrawTraversal::setFrustum | ( | const MPoint & | nearBottomLeft, | |
const MPoint & | nearBottomRight, | |||
const MPoint & | nearTopLeft, | |||
const MPoint & | nearTopRight, | |||
const MPoint & | farBottomLeft, | |||
const MPoint & | farBottomRight, | |||
const MPoint & | farTopLeft, | |||
const MPoint & | farTopRight, | |||
const MMatrix & | worldXform | |||
) |
Set up a frustum to cull with by specifying the 8 corner points. Asymmetric frustum's can be set up using this method.
Note that traversal always requries that a valid frustum to be set. There is no default frustum provided.
[in] | nearBottomLeft | Near bottom left corner of frustum (local space). |
[in] | nearBottomRight | Near bottom Right corner of frustum (local space). |
[in] | nearTopLeft | Near top left corner of frustum (local space). |
[in] | nearTopRight | Near top right corner of frustum (local space). |
[in] | farBottomLeft | Far bottom left corner of frustum (local space). |
[in] | farBottomRight | Far bottom right corner of frustum (local space). |
[in] | farTopLeft | Far top left corner of frustum (local space). |
[in] | farTopRight | Far top right corner of frustum (local space). |
[in] | worldXform | transformation from local to world space. |
bool MDrawTraversal::frustumValid | ( | ) | const |
Returns whether the current frustum set is valid or not. If it is not valid a call to the traverse() function will result in returning failure.
void MDrawTraversal::setLeafLevelCulling | ( | bool | cullAtLeafLevel | ) |
Set whether to cull at the leaf levels, or perform hierarchical culling.
This value should be set before traversing using the traverse() function.
If a value is not explicitly set, the default is to perform culling at the leaf levels only.
[in] | cullAtLeafLevel | flag to indicate culling preference. |
bool MDrawTraversal::leafLevelCulling | ( | ) | const |
Returns whether the current cull algorithm will cull at the leaf levels, or perform hierarchical culling. The default value is leaf level culling.
void MDrawTraversal::enableFiltering | ( | bool | val | ) |
Sets whether to use enable usage of the filterNode() method to perform custom filtering. By default this is set to false.
Filtering must be enabled for filterNode() to be called during traversal.
[in] | val | value for enabling. |
bool MDrawTraversal::filteringEnabled | ( | ) | const |
Tells whether custom filtering has been enabled. That is, to use the filterNode() method during traversal.
By default this is set to false.
Filtering must be enabled for filterNode() to be called during traversal.
unsigned int MDrawTraversal::numberOfItems | ( | ) | const |
Return the number of items found after traversal.
Get the path for a given item in the list of found items after traversal.
[in] | itemNumber | which item to return. |
[out] | path | path of item (returned). |
bool MDrawTraversal::itemHasStatus | ( | unsigned int | itemNumber, | |
unsigned int | test | |||
) | const |
Test the display status for a given item in the list of found items after traversal.
[in] | itemNumber | which item to return. |
[in] | test | the display status to check the item against. |
Autodesk® Maya® 2009 © 1997-2008 Autodesk, Inc. All rights reserved. | Generated with 1.5.6 |