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 getCenter(void) const
Gets the center of this cell.
bool isBorderBack(const OctreeNode &root) const
Gets whether this cell is at the back of the given root cell.
const Vector3 getCenterLeftBottom(void) const
Gets the center of the corners 0, 3.
const Vector3 getCorner7(void) const
Gets the coordinate of corner 7.
const Vector3 & getTo(void) const
Gets the front upper right corner of the cell.
4-dimensional homogeneous vector.
const Vector3 getCenterBottom(void) const
Gets the center of the corners 0, 1, 2, 3.
float Real
Software floating point type.
const Vector3 getCenterFrontTop(void) const
Gets the center of the corners 6, 7.
Entity * mOctreeGrid
Holds the debug visualization of the octree. Just set in the root.
Vector3 mFrom
The back lower left corner of the cell.
const Vector3 getCenterLeftTop(void) const
Gets the center of the corners 4, 7.
const Vector3 getCorner4(void) const
Gets the coordinate of corner 4.
void setCenterValue(Vector4 value)
Raw setter for the center value.
const Vector3 getCorner2(void) const
Gets the coordinate of corner 2.
Class providing a much simplified interface to generating manual objects with custom geometry...
bool isBorderTop(const OctreeNode &root) const
Gets whether this cell is at the top of the given root cell.
const Vector3 getCenterBackRight(void) const
Gets the center of the corners 1, 5.
static Real Abs(Real fValue)
Absolute value function.
static const Real NEAR_FACTOR
Factor to the diagonal of the cell to decide whether this cell is near the isosurface or not...
const Vector3 getCenterFrontLeft(void) const
Gets the center of the corners 3, 7.
bool isBorderBottom(const OctreeNode &root) const
Gets whether this cell is at the bottom of the given root cell.
const Vector3 getCenterFrontRight(void) const
Gets the center of the corners 2, 6.
Standard 3-dimensional vector.
const Vector3 getCenterBackTop(void) const
Gets the center of the corners 4, 5.
const Vector4 getCenterValue(void) const
Gets the center value.
const Vector3 getCorner5(void) const
Gets the coordinate of corner 5.
const Vector3 & getFrom(void) const
Gets the back lower left corner of the cell.
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.
void setFrom(Vector3 from)
Setter for the from-part of this cell.
const Vector3 getCenterTop(void) const
Gets the center of the corners 4, 5, 6, 7.
static const size_t OCTREE_CHILDREN_COUNT
Even in an OCtree, the amount of children should not be hardcoded.
const Vector3 getCorner1(void) const
Gets the coordinate of corner 1.
Vector3 mTo
The front upper right corner of the cell.
const Vector3 getCenterBack(void) const
Gets the center of the corners 0, 1, 4, 5.
bool isIsoSurfaceNear(void) const
Gets whether the isosurface is somewhat near to this node.
const Vector3 getCenterFront(void) const
Gets the center of the corners 2, 3, 6, 7.
const Vector3 getCenterRightTop(void) const
Gets the center of the corners 5, 6.
const Vector3 getCenterBackLeft(void) const
Gets the center of the corners 0, 4.
A node in the volume octree.
OctreeNode ** mChildren
The children of this node.
Vector4 mCenterValue
Density and gradient of the center.
bool isBorderRight(const OctreeNode &root) const
Gets whether this cell is at the right of the given root cell.
const Vector3 getCenterRightBottom(void) const
Gets the center of the corners 1, 2.
const OctreeNode * getChild(const size_t i) const
Gets an octree child.
bool isBorderLeft(const OctreeNode &root) const
Gets whether this cell is at the left of the given root cell.
const Vector3 getCenterBackBottom(void) const
Gets the center of the corners 0, 1.
const Vector3 getCenterFrontBottom(void) const
Gets the center of the corners 2, 3.
const Vector3 getCorner3(void) const
Gets the coordinate of corner 3.
Defines an instance of a discrete, movable object based on a Mesh.
bool isSubdivided(void) const
Gets whether this cell has any children.
The class deciding on whether to split an octree node or not when building the octree.
Abstract class defining the density function.
Manages the organisation and rendering of a 'scene' i.e.
static uint32 mGridPositionCount
To count some indices while creating the debug view and recursing through the instances.
const Vector3 getCenterRight(void) const
Gets the center of the corners 1, 2, 5, 6.
bool isBorderFront(const OctreeNode &root) const
Gets whether this cell is at the front of the given root cell.
#define _OgreVolumeExport
static size_t mNodeI
To give the debug manual object an unique name.
Superclass for all objects that wish to use custom memory allocators when their new / delete operator...
const Vector3 getCenterLeft(void) const
Gets the center of the corners 0, 3, 4, 6.
void setTo(Vector3 to)
Setter for the to-part of this cell.
static const Vector3 ZERO