OGRE  2.0
Object-Oriented Graphics Rendering Engine
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
Ogre::Volume::OctreeNode Class Reference

A node in the volume octree. More...

#include <OgreVolumeOctreeNode.h>

+ Inheritance diagram for Ogre::Volume::OctreeNode:
+ Collaboration diagram for Ogre::Volume::OctreeNode:

Public Member Functions

 OctreeNode (const Vector3 &from=Vector3::ZERO, const Vector3 &to=Vector3::ZERO)
 Constructor. More...
 
virtual ~OctreeNode (void)
 Destructor. More...
 
virtual OctreeNodecreateInstance (const Vector3 &from, const Vector3 &to)
 Factory method to create octree nodes. More...
 
const Vector3 getCenter (void) const
 Gets the center of this cell. More...
 
const Vector3 getCenterBack (void) const
 Gets the center of the corners 0, 1, 4, 5. More...
 
const Vector3 getCenterBackBottom (void) const
 Gets the center of the corners 0, 1. More...
 
const Vector3 getCenterBackLeft (void) const
 Gets the center of the corners 0, 4. More...
 
const Vector3 getCenterBackRight (void) const
 Gets the center of the corners 1, 5. More...
 
const Vector3 getCenterBackTop (void) const
 Gets the center of the corners 4, 5. More...
 
const Vector3 getCenterBottom (void) const
 Gets the center of the corners 0, 1, 2, 3. More...
 
const Vector3 getCenterFront (void) const
 Gets the center of the corners 2, 3, 6, 7. More...
 
const Vector3 getCenterFrontBottom (void) const
 Gets the center of the corners 2, 3. More...
 
const Vector3 getCenterFrontLeft (void) const
 Gets the center of the corners 3, 7. More...
 
const Vector3 getCenterFrontRight (void) const
 Gets the center of the corners 2, 6. More...
 
const Vector3 getCenterFrontTop (void) const
 Gets the center of the corners 6, 7. More...
 
const Vector3 getCenterLeft (void) const
 Gets the center of the corners 0, 3, 4, 6. More...
 
const Vector3 getCenterLeftBottom (void) const
 Gets the center of the corners 0, 3. More...
 
const Vector3 getCenterLeftTop (void) const
 Gets the center of the corners 4, 7. More...
 
const Vector3 getCenterRight (void) const
 Gets the center of the corners 1, 2, 5, 6. More...
 
const Vector3 getCenterRightBottom (void) const
 Gets the center of the corners 1, 2. More...
 
const Vector3 getCenterRightTop (void) const
 Gets the center of the corners 5, 6. More...
 
const Vector3 getCenterTop (void) const
 Gets the center of the corners 4, 5, 6, 7. More...
 
const Vector4 getCenterValue (void) const
 Gets the center value. More...
 
const OctreeNodegetChild (const size_t i) const
 Gets an octree child. More...
 
const Vector3 getCorner1 (void) const
 Gets the coordinate of corner 1. More...
 
const Vector3 getCorner2 (void) const
 Gets the coordinate of corner 2. More...
 
const Vector3 getCorner3 (void) const
 Gets the coordinate of corner 3. More...
 
const Vector3 getCorner4 (void) const
 Gets the coordinate of corner 4. More...
 
const Vector3 getCorner5 (void) const
 Gets the coordinate of corner 5. More...
 
const Vector3 getCorner7 (void) const
 Gets the coordinate of corner 7. More...
 
const Vector3getFrom (void) const
 Gets the back lower left corner of the cell. More...
 
EntitygetOctreeGrid (SceneManager *sceneManager)
 Getter for the octree debug visualization of the octree starting with this node. More...
 
const Vector3getTo (void) const
 Gets the front upper right corner of the cell. More...
 
bool isBorderBack (const OctreeNode &root) const
 Gets whether this cell is at the back of the given root cell. More...
 
bool isBorderBottom (const OctreeNode &root) const
 Gets whether this cell is at the bottom of the given root cell. More...
 
bool isBorderFront (const OctreeNode &root) const
 Gets whether this cell is at the front of the given root cell. More...
 
bool isBorderLeft (const OctreeNode &root) const
 Gets whether this cell is at the left of the given root cell. More...
 
bool isBorderRight (const OctreeNode &root) const
 Gets whether this cell is at the right of the given root cell. More...
 
bool isBorderTop (const OctreeNode &root) const
 Gets whether this cell is at the top of the given root cell. More...
 
bool isIsoSurfaceNear (void) const
 Gets whether the isosurface is somewhat near to this node. More...
 
bool isSubdivided (void) const
 Gets whether this cell has any children. More...
 
void operator delete (void *ptr)
 
void operator delete (void *ptr, void *)
 
void operator delete (void *ptr, const char *, int, const char *)
 
void operator delete[] (void *ptr)
 
void operator delete[] (void *ptr, const char *, int, const char *)
 
void * operator new (size_t sz, const char *file, int line, const char *func)
 operator new, with debug line info More...
 
void * operator new (size_t sz)
 
void * operator new (size_t sz, void *ptr)
 placement operator new More...
 
void * operator new[] (size_t sz, const char *file, int line, const char *func)
 array operator new, with debug line info More...
 
void * operator new[] (size_t sz)
 
void setCenterValue (Vector4 value)
 Raw setter for the center value. More...
 
void setFrom (Vector3 from)
 Setter for the from-part of this cell. More...
 
void setTo (Vector3 to)
 Setter for the to-part of this cell. More...
 
void split (const OctreeNodeSplitPolicy *splitPolicy, const Source *src, const Real geometricError)
 Splits this cell if the split policy says so. More...
 

Static Public Member Functions

static void getChildrenDimensions (const Vector3 &from, const Vector3 &to, Vector3 &center, Vector3 &width, Vector3 &height, Vector3 &depth)
 Gets the center and width / height / depth vector of the children of a node. More...
 

Static Public Attributes

static const size_t OCTREE_CHILDREN_COUNT
 Even in an OCtree, the amount of children should not be hardcoded. More...
 

Protected Member Functions

void buildOctreeGridLines (ManualObject *manual) const
 Method to actually add the lines of the octree cells to the debug visualization. More...
 

Protected Attributes

Vector4 mCenterValue
 Density and gradient of the center. More...
 
OctreeNode ** mChildren
 The children of this node. More...
 
Vector3 mFrom
 The back lower left corner of the cell. More...
 
EntitymOctreeGrid
 Holds the debug visualization of the octree. Just set in the root. More...
 
Vector3 mTo
 The front upper right corner of the cell. More...
 

Static Protected Attributes

static uint32 mGridPositionCount
 To count some indices while creating the debug view and recursing through the instances. More...
 
static size_t mNodeI
 To give the debug manual object an unique name. More...
 
static const Real NEAR_FACTOR
 Factor to the diagonal of the cell to decide whether this cell is near the isosurface or not. More...
 

Detailed Description

A node in the volume octree.

Definition at line 44 of file OgreVolumeOctreeNode.h.

Constructor & Destructor Documentation

Ogre::Volume::OctreeNode::OctreeNode ( const Vector3 from = Vector3::ZERO,
const Vector3 to = Vector3::ZERO 
)

Constructor.

Parameters
fromThe back lower left corner of the cell.
toThe front upper right corner of the cell.
virtual Ogre::Volume::OctreeNode::~OctreeNode ( void  )
virtual

Destructor.

Member Function Documentation

void Ogre::Volume::OctreeNode::buildOctreeGridLines ( ManualObject manual) const
protected

Method to actually add the lines of the octree cells to the debug visualization.

Parameters
manualThe manual object to add the lines to if this is a leaf in the octree.
virtual OctreeNode* Ogre::Volume::OctreeNode::createInstance ( const Vector3 from,
const Vector3 to 
)
virtual

Factory method to create octree nodes.

Parameters
fromThe back lower left corner of the cell.
toThe front upper right corner of the cell.
Returns
The created entity. Make sure to destroy it when you don't need it anymore.
const Vector3 Ogre::Volume::OctreeNode::getCenter ( void  ) const
inline

Gets the center of this cell.

Returns
The center.

Definition at line 199 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCenterBack ( void  ) const
inline

Gets the center of the corners 0, 1, 4, 5.

Returns
The center.

Definition at line 292 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCenterBackBottom ( void  ) const
inline

Gets the center of the corners 0, 1.

Returns
The center.

Definition at line 355 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCenterBackLeft ( void  ) const
inline

Gets the center of the corners 0, 4.

Returns
The center.

Definition at line 418 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCenterBackRight ( void  ) const
inline

Gets the center of the corners 1, 5.

Returns
The center.

Definition at line 436 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCenterBackTop ( void  ) const
inline

Gets the center of the corners 4, 5.

Returns
The center.

Definition at line 346 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCenterBottom ( void  ) const
inline

Gets the center of the corners 0, 1, 2, 3.

Returns
The center.

Definition at line 337 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCenterFront ( void  ) const
inline

Gets the center of the corners 2, 3, 6, 7.

Returns
The center.

Definition at line 301 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCenterFrontBottom ( void  ) const
inline

Gets the center of the corners 2, 3.

Returns
The center.

Definition at line 373 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCenterFrontLeft ( void  ) const
inline

Gets the center of the corners 3, 7.

Returns
The center.

Definition at line 427 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCenterFrontRight ( void  ) const
inline

Gets the center of the corners 2, 6.

Returns
The center.

Definition at line 445 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCenterFrontTop ( void  ) const
inline

Gets the center of the corners 6, 7.

Returns
The center.

Definition at line 364 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCenterLeft ( void  ) const
inline

Gets the center of the corners 0, 3, 4, 6.

Returns
The center.

Definition at line 310 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCenterLeftBottom ( void  ) const
inline

Gets the center of the corners 0, 3.

Returns
The center.

Definition at line 391 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCenterLeftTop ( void  ) const
inline

Gets the center of the corners 4, 7.

Returns
The center.

Definition at line 382 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCenterRight ( void  ) const
inline

Gets the center of the corners 1, 2, 5, 6.

Returns
The center.

Definition at line 319 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCenterRightBottom ( void  ) const
inline

Gets the center of the corners 1, 2.

Returns
The center.

Definition at line 409 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCenterRightTop ( void  ) const
inline

Gets the center of the corners 5, 6.

Returns
The center.

Definition at line 400 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCenterTop ( void  ) const
inline

Gets the center of the corners 4, 5, 6, 7.

Returns
The center.

Definition at line 328 of file OgreVolumeOctreeNode.h.

const Vector4 Ogre::Volume::OctreeNode::getCenterValue ( void  ) const
inline

Gets the center value.

Returns
The center value, one Vector4 consisting of gradient (x, y, z) and density (w).

Definition at line 517 of file OgreVolumeOctreeNode.h.

const OctreeNode* Ogre::Volume::OctreeNode::getChild ( const size_t  i) const
inline

Gets an octree child.

Enumeration: 4 5 7 6 0 1 3 2

Parameters
iThe child index.
Returns
The child.

Definition at line 190 of file OgreVolumeOctreeNode.h.

static void Ogre::Volume::OctreeNode::getChildrenDimensions ( const Vector3 from,
const Vector3 to,
Vector3 center,
Vector3 width,
Vector3 height,
Vector3 depth 
)
inlinestatic

Gets the center and width / height / depth vector of the children of a node.

Parameters
fromThe back lower left corner of the cell.
toThe front upper right corner of the cell.
centerOut parameter of the calculated center.
widthOut parameter of the width vector (width in x, rest zero).
heightOut parameter of the height vector (height in y, rest zero).
depthOut parameter of the depth vector (depth in z, rest zero).

Definition at line 97 of file OgreVolumeOctreeNode.h.

References Ogre::Vector3::x, Ogre::Vector3::y, and Ogre::Vector3::z.

const Vector3 Ogre::Volume::OctreeNode::getCorner1 ( void  ) const
inline

Gets the coordinate of corner 1.

Returns
The corner.

Definition at line 454 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCorner2 ( void  ) const
inline

Gets the coordinate of corner 2.

Returns
The corner.

Definition at line 463 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCorner3 ( void  ) const
inline

Gets the coordinate of corner 3.

Returns
The corner.

Definition at line 472 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCorner4 ( void  ) const
inline

Gets the coordinate of corner 4.

Returns
The corner.

Definition at line 481 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCorner5 ( void  ) const
inline

Gets the coordinate of corner 5.

Returns
The corner.

Definition at line 490 of file OgreVolumeOctreeNode.h.

const Vector3 Ogre::Volume::OctreeNode::getCorner7 ( void  ) const
inline

Gets the coordinate of corner 7.

Returns
The corner.

Definition at line 499 of file OgreVolumeOctreeNode.h.

const Vector3& Ogre::Volume::OctreeNode::getFrom ( void  ) const
inline

Gets the back lower left corner of the cell.

Returns
The back lower left corner of the cell.

Definition at line 208 of file OgreVolumeOctreeNode.h.

Entity* Ogre::Volume::OctreeNode::getOctreeGrid ( SceneManager sceneManager)

Getter for the octree debug visualization of the octree starting with this node.

Parameters
sceneManagerThe scenemanager creating the actual entity.
Returns
The lazily created debug visualization.
const Vector3& Ogre::Volume::OctreeNode::getTo ( void  ) const
inline

Gets the front upper right corner of the cell.

Returns
The front upper right corner of the cell.

Definition at line 217 of file OgreVolumeOctreeNode.h.

bool Ogre::Volume::OctreeNode::isBorderBack ( const OctreeNode root) const
inline

Gets whether this cell is at the back of the given root cell.

Parameters
rootThe octree root node to test against.
Returns
true if so.

Definition at line 272 of file OgreVolumeOctreeNode.h.

References mFrom, and Ogre::Vector3::z.

bool Ogre::Volume::OctreeNode::isBorderBottom ( const OctreeNode root) const
inline

Gets whether this cell is at the bottom of the given root cell.

Parameters
rootThe octree root node to test against.
Returns
true if so.

Definition at line 250 of file OgreVolumeOctreeNode.h.

References mFrom, and Ogre::Vector3::y.

bool Ogre::Volume::OctreeNode::isBorderFront ( const OctreeNode root) const
inline

Gets whether this cell is at the front of the given root cell.

Parameters
rootThe octree root node to test against.
Returns
true if so.

Definition at line 283 of file OgreVolumeOctreeNode.h.

References mTo, and Ogre::Vector3::z.

bool Ogre::Volume::OctreeNode::isBorderLeft ( const OctreeNode root) const
inline

Gets whether this cell is at the left of the given root cell.

Parameters
rootThe octree root node to test against.
Returns
true if so.

Definition at line 228 of file OgreVolumeOctreeNode.h.

References mFrom, and Ogre::Vector3::x.

bool Ogre::Volume::OctreeNode::isBorderRight ( const OctreeNode root) const
inline

Gets whether this cell is at the right of the given root cell.

Parameters
rootThe octree root node to test against.
Returns
true if so.

Definition at line 239 of file OgreVolumeOctreeNode.h.

References mTo, and Ogre::Vector3::x.

bool Ogre::Volume::OctreeNode::isBorderTop ( const OctreeNode root) const
inline

Gets whether this cell is at the top of the given root cell.

Parameters
rootThe octree root node to test against.
Returns
true if so.

Definition at line 261 of file OgreVolumeOctreeNode.h.

References mTo, and Ogre::Vector3::y.

bool Ogre::Volume::OctreeNode::isIsoSurfaceNear ( void  ) const
inline

Gets whether the isosurface is somewhat near to this node.

Returns
true if somewhat near.

Definition at line 526 of file OgreVolumeOctreeNode.h.

References Ogre::Math::Abs().

bool Ogre::Volume::OctreeNode::isSubdivided ( void  ) const
inline

Gets whether this cell has any children.

Returns
True if so.

Definition at line 175 of file OgreVolumeOctreeNode.h.

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete ( void *  ptr)
inlineinherited

Definition at line 96 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete ( void *  ptr,
void *   
)
inlineinherited

Definition at line 102 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete ( void *  ptr,
const char *  ,
int  ,
const char *   
)
inlineinherited

Definition at line 108 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete[] ( void *  ptr)
inlineinherited

Definition at line 113 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete[] ( void *  ptr,
const char *  ,
int  ,
const char *   
)
inlineinherited

Definition at line 119 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new ( size_t  sz,
const char *  file,
int  line,
const char *  func 
)
inlineinherited

operator new, with debug line info

Definition at line 68 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new ( size_t  sz)
inlineinherited

Definition at line 73 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new ( size_t  sz,
void *  ptr 
)
inlineinherited

placement operator new

Definition at line 79 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new[] ( size_t  sz,
const char *  file,
int  line,
const char *  func 
)
inlineinherited

array operator new, with debug line info

Definition at line 86 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new[] ( size_t  sz)
inlineinherited

Definition at line 91 of file OgreMemoryAllocatedObject.h.

void Ogre::Volume::OctreeNode::setCenterValue ( Vector4  value)
inline

Raw setter for the center value.

Parameters
valueThe density value.

Definition at line 508 of file OgreVolumeOctreeNode.h.

void Ogre::Volume::OctreeNode::setFrom ( Vector3  from)
inline

Setter for the from-part of this cell.

Parameters
fromThe back lower left corner of the cell.

Definition at line 157 of file OgreVolumeOctreeNode.h.

void Ogre::Volume::OctreeNode::setTo ( Vector3  to)
inline

Setter for the to-part of this cell.

Parameters
toThe front upper right corner of the cell.

Definition at line 166 of file OgreVolumeOctreeNode.h.

void Ogre::Volume::OctreeNode::split ( const OctreeNodeSplitPolicy splitPolicy,
const Source src,
const Real  geometricError 
)

Splits this cell if the split policy says so.

Parameters
splitPolicyDefines the policy deciding whether to split this node or not.
srcThe volume source.
geometricErrorThe accepted geometric error.

Member Data Documentation

Vector4 Ogre::Volume::OctreeNode::mCenterValue
protected

Density and gradient of the center.

Definition at line 70 of file OgreVolumeOctreeNode.h.

OctreeNode** Ogre::Volume::OctreeNode::mChildren
protected

The children of this node.

Definition at line 64 of file OgreVolumeOctreeNode.h.

Vector3 Ogre::Volume::OctreeNode::mFrom
protected

The back lower left corner of the cell.

Definition at line 58 of file OgreVolumeOctreeNode.h.

Referenced by isBorderBack(), isBorderBottom(), and isBorderLeft().

uint32 Ogre::Volume::OctreeNode::mGridPositionCount
staticprotected

To count some indices while creating the debug view and recursing through the instances.

Definition at line 52 of file OgreVolumeOctreeNode.h.

size_t Ogre::Volume::OctreeNode::mNodeI
staticprotected

To give the debug manual object an unique name.

Definition at line 55 of file OgreVolumeOctreeNode.h.

Entity* Ogre::Volume::OctreeNode::mOctreeGrid
protected

Holds the debug visualization of the octree. Just set in the root.

Definition at line 67 of file OgreVolumeOctreeNode.h.

Vector3 Ogre::Volume::OctreeNode::mTo
protected

The front upper right corner of the cell.

Definition at line 61 of file OgreVolumeOctreeNode.h.

Referenced by isBorderFront(), isBorderRight(), and isBorderTop().

const Real Ogre::Volume::OctreeNode::NEAR_FACTOR
staticprotected

Factor to the diagonal of the cell to decide whether this cell is near the isosurface or not.

Definition at line 49 of file OgreVolumeOctreeNode.h.

const size_t Ogre::Volume::OctreeNode::OCTREE_CHILDREN_COUNT
static

Even in an OCtree, the amount of children should not be hardcoded.

Definition at line 81 of file OgreVolumeOctreeNode.h.


The documentation for this class was generated from the following file: