Go to the documentation of this file.
28 #ifndef __Ogre_Volume_OctreeNode_H__
29 #define __Ogre_Volume_OctreeNode_H__
41 class OctreeNodeSplitPolicy;
100 center = (to - from) / (
Real)2.0;
104 height.
x = (
Real)0.0;
106 height.
z = (
Real)0.0;
178 return mChildren != 0;
202 return (mFrom + mTo) / (
Real)2.0;
231 return mFrom.
x == root.
mFrom.
x;
242 return mTo.
x == root.
mTo.
x;
253 return mFrom.
y == root.
mFrom.
y;
264 return mTo.
y == root.
mTo.
y;
275 return mFrom.
z == root.
mFrom.
z;
286 return mTo.
z == root.
mTo.
z;
295 return Vector3(mFrom.
x + (mTo.
x - mFrom.
x) / (
Real)2.0, mFrom.
y + (mTo.
y - mFrom.
y) / (
Real)2.0, mFrom.
z);
313 return Vector3(mFrom.
x, mFrom.
y + (mTo.
y - mFrom.
y) / (
Real)2.0, mFrom.
z + (mTo.
z - mFrom.
z) / (
Real)2.0);
340 return Vector3(mFrom.
x + (mTo.
x - mFrom.
x) / (
Real)2.0, mFrom.
y, mFrom.
z + (mTo.
z - mFrom.
z) / (
Real)2.0);
511 mCenterValue = value;
529 if (mCenterValue.
w == (
Real)0.0)
533 return Math::Abs(mCenterValue.
w) < (mFrom - mTo).length() * NEAR_FACTOR;
const Vector3 getCenterFront(void) const
Gets the center of the corners 2, 3, 6, 7.
bool isBorderBottom(const OctreeNode &root) const
Gets whether this cell is at the bottom of the given root cell.
void buildOctreeGridLines(ManualObject *manual) const
Method to actually add the lines of the octree cells to the debug visualization.
Vector4 mCenterValue
Density and gradient of the center.
void split(const OctreeNodeSplitPolicy *splitPolicy, const Source *src, const Real geometricError)
Splits this cell if the split policy says so.
Superclass for all objects that wish to use custom memory allocators when their new / delete operator...
static const Vector3 ZERO
bool isBorderFront(const OctreeNode &root) const
Gets whether this cell is at the front of the given root cell.
static const Real NEAR_FACTOR
Factor to the diagonal of the cell to decide whether this cell is near the isosurface or not.
static void getChildrenDimensions(const Vector3 &from, const Vector3 &to, Vector3 ¢er, Vector3 &width, Vector3 &height, Vector3 &depth)
Gets the center and width / height / depth vector of the children of a node.
bool isBorderLeft(const OctreeNode &root) const
Gets whether this cell is at the left of the given root cell.
Entity * getOctreeGrid(SceneManager *sceneManager)
Getter for the octree debug visualization of the octree starting with this node.
static size_t mNodeI
To give the debug manual object an unique name.
void setTo(Vector3 to)
Setter for the to-part of this cell.
void setFrom(Vector3 from)
Setter for the from-part of this cell.
const Vector3 getCenterBack(void) const
Gets the center of the corners 0, 1, 4, 5.
Class providing a much simplified interface to generating manual objects with custom geometry.
static const size_t OCTREE_CHILDREN_COUNT
Even in an OCtree, the amount of children should not be hardcoded.
bool isBorderBack(const OctreeNode &root) const
Gets whether this cell is at the back of the given root cell.
bool isIsoSurfaceNear(void) const
Gets whether the isosurface is somewhat near to this node.
const Vector3 getCorner7(void) const
Gets the coordinate of corner 7.
const Vector3 getCenterFrontBottom(void) const
Gets the center of the corners 2, 3.
const Vector3 getCenterLeftBottom(void) const
Gets the center of the corners 0, 3.
Defines an instance of a discrete, movable object based on a Mesh.
const Vector4 getCenterValue(void) const
Gets the center value.
virtual ~OctreeNode(void)
Destructor.
OctreeNode ** mChildren
The children of this node.
const Vector3 getCorner5(void) const
Gets the coordinate of corner 5.
const Vector3 getCorner4(void) const
Gets the coordinate of corner 4.
bool isBorderTop(const OctreeNode &root) const
Gets whether this cell is at the top of the given root cell.
Manages the organisation and rendering of a 'scene' i.e.
void setCenterValue(Vector4 value)
Raw setter for the center value.
Entity * mOctreeGrid
Holds the debug visualization of the octree. Just set in the root.
const Vector3 getCenterBackLeft(void) const
Gets the center of the corners 0, 4.
const Vector3 getCenterRightTop(void) const
Gets the center of the corners 5, 6.
const Vector3 getCenterBottom(void) const
Gets the center of the corners 0, 1, 2, 3.
const Vector3 getCenterLeftTop(void) const
Gets the center of the corners 4, 7.
const Vector3 getCenterRightBottom(void) const
Gets the center of the corners 1, 2.
const Vector3 getCenterBackBottom(void) const
Gets the center of the corners 0, 1.
Vector3 mFrom
The back lower left corner of the cell.
The class deciding on whether to split an octree node or not when building the octree.
const Vector3 getCenterFrontLeft(void) const
Gets the center of the corners 3, 7.
const Vector3 getCenterFrontRight(void) const
Gets the center of the corners 2, 6.
const Vector3 getCenterBackRight(void) const
Gets the center of the corners 1, 5.
bool isBorderRight(const OctreeNode &root) const
Gets whether this cell is at the right of the given root cell.
const Vector3 getCenterLeft(void) const
Gets the center of the corners 0, 3, 4, 6.
static uint32 mGridPositionCount
To count some indices while creating the debug view and recursing through the instances.
const Vector3 getCorner2(void) const
Gets the coordinate of corner 2.
const OctreeNode * getChild(const size_t i) const
Gets an octree child.
#define _OgreVolumeExport
const Vector3 & getFrom(void) const
Gets the back lower left corner of the cell.
4-dimensional homogeneous vector.
const Vector3 getCenterTop(void) const
Gets the center of the corners 4, 5, 6, 7.
bool isSubdivided(void) const
Gets whether this cell has any children.
OctreeNode(const Vector3 &from=Vector3::ZERO, const Vector3 &to=Vector3::ZERO)
Constructor.
virtual OctreeNode * createInstance(const Vector3 &from, const Vector3 &to)
Factory method to create octree nodes.
const Vector3 getCenterRight(void) const
Gets the center of the corners 1, 2, 5, 6.
float Real
Software floating point type.
const Vector3 getCorner1(void) const
Gets the coordinate of corner 1.
const Vector3 & getTo(void) const
Gets the front upper right corner of the cell.
const Vector3 getCenterFrontTop(void) const
Gets the center of the corners 6, 7.
static Real Abs(Real fValue)
Absolute value function.
const Vector3 getCenterBackTop(void) const
Gets the center of the corners 4, 5.
Standard 3-dimensional vector.
Abstract class defining the density function.
const Vector3 getCenter(void) const
Gets the center of this cell.
const Vector3 getCorner3(void) const
Gets the coordinate of corner 3.
Vector3 mTo
The front upper right corner of the cell.
A node in the volume octree.
Copyright © 2012 Torus Knot Software Ltd

This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.