#include <kdtreeaccel.h>
Public Member Functions | |
KdTreeAccel (const vector< Reference< Primitive > > &p, int icost=80, int scost=1, float ebonus=0.5f, int maxp=1, int maxDepth=-1) | |
BBox | WorldBound () const |
bool | CanIntersect () const |
~KdTreeAccel () | |
bool | Intersect (const Ray &ray, Intersection *isect) const |
bool | IntersectP (const Ray &ray) const |
Private Member Functions | |
void | buildTree (int nodeNum, const BBox &bounds, const vector< BBox > &primBounds, uint32_t *primNums, int nprims, int depth, BoundEdge *edges[3], uint32_t *prims0, uint32_t *prims1, int badRefines=0) |
Private Attributes | |
int | isectCost |
int | traversalCost |
int | maxPrims |
int | maxDepth |
float | emptyBonus |
vector< Reference< Primitive > > | primitives |
KdAccelNode * | nodes |
int | nAllocedNodes |
int | nextFreeNode |
BBox | bounds |
MemoryArena | arena |
Definition at line 38 of file kdtreeaccel.h.
KdTreeAccel::KdTreeAccel | ( | const vector< Reference< Primitive > > & | p, | |
int | icost = 80 , |
|||
int | scost = 1 , |
|||
float | ebonus = 0.5f , |
|||
int | maxp = 1 , |
|||
int | maxDepth = -1 | |||
) |
Definition at line 80 of file kdtreeaccel.cpp.
References bounds, buildTree(), Primitive::FullyRefine(), Log2Int(), maxDepth, nAllocedNodes, nextFreeNode, primitives, Round2Int(), and Union().
KdTreeAccel::~KdTreeAccel | ( | ) |
Definition at line 145 of file kdtreeaccel.cpp.
References FreeAligned(), and nodes.
void KdTreeAccel::buildTree | ( | int | nodeNum, | |
const BBox & | bounds, | |||
const vector< BBox > & | primBounds, | |||
uint32_t * | primNums, | |||
int | nprims, | |||
int | depth, | |||
BoundEdge * | edges[3], | |||
uint32_t * | prims0, | |||
uint32_t * | prims1, | |||
int | badRefines = 0 | |||
) | [private] |
Definition at line 150 of file kdtreeaccel.cpp.
References arena, Assert, emptyBonus, BoundEdge::END, FreeAligned(), INFINITY, KdAccelNode::initInterior(), KdAccelNode::initLeaf(), isectCost, maxDepth, BBox::MaximumExtent(), maxPrims, nAllocedNodes, nextFreeNode, nodes, BBox::pMax, BBox::pMin, BoundEdge::primNum, BoundEdge::START, BBox::SurfaceArea(), BoundEdge::t, and traversalCost.
Referenced by KdTreeAccel().
bool KdTreeAccel::CanIntersect | ( | ) | const [inline, virtual] |
Reimplemented from Primitive.
Definition at line 45 of file kdtreeaccel.h.
bool KdTreeAccel::Intersect | ( | const Ray & | ray, | |
Intersection * | isect | |||
) | const [virtual] |
Implements Primitive.
Definition at line 269 of file kdtreeaccel.cpp.
References KdAccelNode::AboveChild(), bounds, Ray::d, Reference< T >::GetPtr(), BBox::IntersectP(), KdAccelNode::IsLeaf(), MAX_TODO, Ray::maxt, KdToDo::node, nodes, KdAccelNode::nPrimitives(), Ray::o, KdAccelNode::onePrimitive, KdAccelNode::primitives, primitives, KdAccelNode::SplitAxis(), KdAccelNode::SplitPos(), KdToDo::tmax, KdToDo::tmin, Vector::x, Vector::y, and Vector::z.
bool KdTreeAccel::IntersectP | ( | const Ray & | ray | ) | const [virtual] |
Implements Primitive.
Definition at line 372 of file kdtreeaccel.cpp.
References KdAccelNode::AboveChild(), bounds, Ray::d, Reference< T >::GetPtr(), BBox::IntersectP(), KdAccelNode::IsLeaf(), MAX_TODO, KdToDo::node, nodes, KdAccelNode::nPrimitives(), Ray::o, KdAccelNode::onePrimitive, KdAccelNode::primitives, primitives, KdAccelNode::SplitAxis(), KdAccelNode::SplitPos(), KdToDo::tmax, KdToDo::tmin, Vector::x, Vector::y, and Vector::z.
BBox KdTreeAccel::WorldBound | ( | ) | const [inline, virtual] |
MemoryArena KdTreeAccel::arena [private] |
Definition at line 62 of file kdtreeaccel.h.
Referenced by buildTree().
BBox KdTreeAccel::bounds [private] |
Definition at line 61 of file kdtreeaccel.h.
Referenced by Intersect(), IntersectP(), KdTreeAccel(), and WorldBound().
float KdTreeAccel::emptyBonus [private] |
Definition at line 57 of file kdtreeaccel.h.
Referenced by buildTree().
int KdTreeAccel::isectCost [private] |
Definition at line 56 of file kdtreeaccel.h.
Referenced by buildTree().
int KdTreeAccel::maxDepth [private] |
Definition at line 56 of file kdtreeaccel.h.
Referenced by buildTree(), and KdTreeAccel().
int KdTreeAccel::maxPrims [private] |
Definition at line 56 of file kdtreeaccel.h.
Referenced by buildTree().
int KdTreeAccel::nAllocedNodes [private] |
Definition at line 60 of file kdtreeaccel.h.
Referenced by buildTree(), and KdTreeAccel().
int KdTreeAccel::nextFreeNode [private] |
Definition at line 60 of file kdtreeaccel.h.
Referenced by buildTree(), and KdTreeAccel().
KdAccelNode* KdTreeAccel::nodes [private] |
Definition at line 59 of file kdtreeaccel.h.
Referenced by buildTree(), Intersect(), IntersectP(), and ~KdTreeAccel().
vector<Reference<Primitive> > KdTreeAccel::primitives [private] |
Definition at line 58 of file kdtreeaccel.h.
Referenced by Intersect(), IntersectP(), and KdTreeAccel().
int KdTreeAccel::traversalCost [private] |
Definition at line 56 of file kdtreeaccel.h.
Referenced by buildTree().