41 unsigned int _numVerticesProcessed;
42 unsigned int _targetNumTrianglesPerLeaf;
43 unsigned int _maxNumLevels;
56 typedef std::vector< unsigned int >
Indices;
71 unsigned int i = _vertexIndices.size();
72 _vertexIndices.push_back(_primitiveIndices.size() + _degenerateCount);
73 _vertexIndices.push_back(1);
74 _vertexIndices.push_back(p0);
75 _primitiveIndices.push_back(i);
78 inline unsigned int addLine(
unsigned int p0,
unsigned int p1)
80 unsigned int i = _vertexIndices.size();
81 _vertexIndices.push_back(_primitiveIndices.size() + _degenerateCount);
82 _vertexIndices.push_back(2);
83 _vertexIndices.push_back(p0);
84 _vertexIndices.push_back(p1);
85 _primitiveIndices.push_back(i);
89 inline unsigned int addTriangle(
unsigned int p0,
unsigned int p1,
unsigned int p2)
91 unsigned int i = _vertexIndices.size();
92 _vertexIndices.push_back(_primitiveIndices.size() + _degenerateCount);
93 _vertexIndices.push_back(3);
94 _vertexIndices.push_back(p0);
95 _vertexIndices.push_back(p1);
96 _vertexIndices.push_back(p2);
97 _primitiveIndices.push_back(i);
101 inline unsigned int addQuad(
unsigned int p0,
unsigned int p1,
unsigned int p2,
unsigned int p3)
103 unsigned int i = _vertexIndices.size();
104 _vertexIndices.push_back(_primitiveIndices.size() + _degenerateCount);
105 _vertexIndices.push_back(4);
106 _vertexIndices.push_back(p0);
107 _vertexIndices.push_back(p1);
108 _vertexIndices.push_back(p2);
109 _vertexIndices.push_back(p3);
110 _primitiveIndices.push_back(i);
137 int num =
static_cast<int>(_kdNodes.size());
138 _kdNodes.push_back(node);
149 template<
class IntersectFunctor>
155 int istart = -node.
first-1;
156 int iend = istart + node.
second;
158 for(
int i=istart; i<iend; ++i)
160 unsigned int primitiveIndex = _primitiveIndices[i];
161 unsigned int originalPIndex = _vertexIndices[primitiveIndex++];
162 unsigned int numVertices = _vertexIndices[primitiveIndex++];
165 case(1): functor.intersect(_vertices.get(), originalPIndex, _vertexIndices[primitiveIndex]);
break;
166 case(2): functor.intersect(_vertices.get(), originalPIndex, _vertexIndices[primitiveIndex], _vertexIndices[primitiveIndex+1]);
break;
167 case(3): functor.intersect(_vertices.get(), originalPIndex, _vertexIndices[primitiveIndex], _vertexIndices[primitiveIndex+1], _vertexIndices[primitiveIndex+2]);
break;
168 case(4): functor.intersect(_vertices.get(), originalPIndex, _vertexIndices[primitiveIndex], _vertexIndices[primitiveIndex+1], _vertexIndices[primitiveIndex+2], _vertexIndices[primitiveIndex+3]);
break;
169 default :
OSG_NOTICE<<
"Warning: KdTree::intersect() encounted unsupported primitive size of "<<numVertices<<std::endl;
break;
173 else if (functor.enter(node.
bb))
175 if (node.
first>0) intersect(functor, _kdNodes[node.
first]);
176 if (node.
second>0) intersect(functor, _kdNodes[node.
second]);
#define OSG_NOTICE
Definition Notify:86
Definition BoundingBox:34
@ SHALLOW_COPY
Definition CopyOp:47
KdTree::BuildOptions _buildOptions
Definition KdTree:206
virtual ~KdTreeBuilder()
Definition KdTree:214
void apply(Geometry &geometry)
osg::ref_ptr< osg::KdTree > _kdTreePrototype
Definition KdTree:208
KdTreeBuilder(const KdTreeBuilder &rhs)
META_NodeVisitor(osg, KdTreeBuilder) virtual KdTreeBuilder *clone()
Definition KdTree:200
void intersect(IntersectFunctor &functor, const KdNode &node) const
Definition KdTree:150
unsigned int addTriangle(unsigned int p0, unsigned int p1, unsigned int p2)
Definition KdTree:89
Indices & getPrimitiveIndices()
Definition KdTree:60
void setVertexIndices(const Indices &indices)
Definition KdTree:64
const Indices & getVertexIndices() const
Definition KdTree:66
unsigned int addPoint(unsigned int p0)
Definition KdTree:69
const osg::Vec3Array * getVertices() const
Definition KdTree:53
META_Shape(osg, KdTree) struct OSG_EXPORT BuildOptions
Definition KdTree:35
KdNode & getNode(int nodeNum)
Definition KdTree:142
int addNode(const KdNode &node)
Definition KdTree:135
unsigned int addLine(unsigned int p0, unsigned int p1)
Definition KdTree:78
Indices _primitiveIndices
Definition KdTree:187
Indices _vertexIndices
Definition KdTree:188
const KdNodeList & getNodes() const
Definition KdTree:146
int value_type
Definition KdTree:116
std::vector< unsigned int > Indices
Definition KdTree:56
unsigned int _degenerateCount
Definition KdTree:182
KdNodeList _kdNodes
Definition KdTree:189
std::vector< KdNode > KdNodeList
Definition KdTree:133
Indices & getVertexIndices()
Definition KdTree:65
void setVertices(osg::Vec3Array *vertices)
Definition KdTree:52
osg::ref_ptr< osg::Vec3Array > _vertices
Definition KdTree:186
const KdNode & getNode(int nodeNum) const
Definition KdTree:143
KdTree(const KdTree &rhs, const osg::CopyOp ©op=osg::CopyOp::SHALLOW_COPY)
virtual bool build(BuildOptions &buildOptions, osg::Geometry *geometry)
void setPrimitiveIndices(const Indices &indices)
Definition KdTree:59
unsigned int addQuad(unsigned int p0, unsigned int p1, unsigned int p2, unsigned int p3)
Definition KdTree:101
const Indices & getPrimitiveIndices() const
Definition KdTree:61
KdNodeList & getNodes()
Definition KdTree:145
Definition NodeVisitor:82
A concrete array holding elements of type T.
Definition Array:243
author: Julien Valentin 2017 (mp3butcher@hotmail.com)
Definition AlphaFunc:19
T * clone(const T *t, const osg::CopyOp ©op=osg::CopyOp::SHALLOW_COPY)
Definition Object:315
#define OSG_EXPORT
Definition osg/Export:39
value_type second
Definition KdTree:131
osg::BoundingBox bb
Definition KdTree:128
value_type first
Definition KdTree:130
KdNode(value_type f, value_type s)
Definition KdTree:124
KdNode()
Definition KdTree:120