1
/******************************************************************************
3
* El'Beem - Free Surface Fluid Simulation with the Lattice Boltzmann Method
4
* Copyright 2003-2006 Nils Thuerey
6
* Tree container for fast triangle intersects
8
*****************************************************************************/
12
#include "ntl_vector3dim.h"
20
#define BSP_STACK_SIZE 50
23
//! bsp tree stack classes, defined in ntl_bsptree.cpp,
24
// detailed definition unnecesseary here
26
class BSPStackElement;
33
//! Class for a bsp tree for triangles
38
//! Default constructor
40
//! Constructor with init
41
ntlTree(int depth, int objnum, ntlScene *scene, int triFlagMask);
46
void subdivide(BSPNode *node, int depth, int axis);
48
//! intersect ray with BSPtree
49
void intersect(const ntlRay &ray, gfxReal &distance, ntlVec3Gfx &normal, ntlTriangle *&tri, int flags, bool forceNonsmooth) const;
50
//! intersect along +X ray
51
void intersectX(const ntlRay &ray, gfxReal &distance, ntlVec3Gfx &normal, ntlTriangle *&tri, int flags, bool forceNonsmooth) const;
53
//! Returns number of nodes
54
int getCurrentNodes( void ) { return mCurrentNodes; }
58
// check if a triangle is in a node
59
bool checkAABBTriangle(ntlVec3Gfx &min, ntlVec3Gfx &max, ntlTriangle *tri);
64
//! distance to plane function for nodes
65
gfxReal distanceToPlane(BSPNode *curr, ntlVec3Gfx plane, ntlRay ray) const;
67
//! return ordering of children nodes relatice to origin point
68
void getChildren(BSPNode *curr, ntlVec3Gfx origin, BSPNode *&node_near, BSPNode *&node_far) const;
70
//! delete a node of the tree with all sub nodes, dont delete root members
71
void deleteNode(BSPNode *curr);
73
//inline bool isLeaf(BSPNode *node) const { return (node->child[0] == NULL); }
77
ntlVec3Gfx mStart,mEnd;
79
//! maximum depth of tree
82
//! maximum number of objects in one node
91
//! stack for the node pointers
92
BSPStack *mpNodeStack;
93
//stack<BSPNode *> nodestack;
95
//! pointer to vertex array
96
vector<ntlVec3Gfx> *mpVertices;
98
//! pointer to vertex array
99
vector<ntlVec3Gfx> *mpVertNormals;
101
//! vector for all the triangles
102
vector<ntlTriangle> *mpTriangles;
103
vector<ntlTriangle *> *mppTriangles;
105
//! temporary array for triangle distribution to nodes
108
//! temporary array for triangle bounding boxes
111
//! triangle mask - include only triangles that match mask
114
//! Status vars (max depth, # of current nodes)
115
int mCurrentDepth, mCurrentNodes;
117
//! duplicated triangles, inited during subdivide