3 using System.Collections.Generic;
21 split = 0.5f * (b0 + b1);
24 vertices =
new List<Vector3>();
25 indices =
new List<int>();
34 if(vertices.Count >= MAX_VERTICES)
38 private Vector3
GetOffset(Vector3 b0, Vector3 b1,
int i) {
42 result = Vector3.zero;
45 result =
new Vector3(b1.x, 0, 0);
48 result =
new Vector3(0, b1.y, 0);
51 result =
new Vector3(b1.x, b1.y, 0);
54 result =
new Vector3(0, 0, b1.z);
57 result =
new Vector3(b1.x, 0, b1.z);
60 result =
new Vector3(0, b1.y, b1.z);
66 Debug.Log(
"VertexTree::Offset() > Something is very, very wrong here.");
67 result = Vector3.zero;
87 Vector3 oppositeBound = bound1 -
bound0;
91 for(
int i=0; i<8; i++) {
92 offset =
GetOffset(bound0, oppositeBound, i);
93 children[i] =
new VertexTree(bound0+offset, split+offset);
114 for(
int i=0; i<vertices.Count; i++) {
115 distance = Vector3.SqrMagnitude(v - vertices[i]);
116 if(distance <= SQ_THRESHOLD)
131 return children[childIndex].
AddVertex(v, ind);
138 for(
int i=0; i<vertices.Count; i++) {
139 distance = Vector3.SqrMagnitude(v - vertices[i]);
140 if(distance <= SQ_THRESHOLD)
161 for(
int i=0; i<vertices.Count; i++) {
162 distance = Vector3.SqrMagnitude(v - vertices[i]);
163 if(distance <= SQ_THRESHOLD)
168 Debug.Log(
"VertexTree::GetIndex() > Error! No vertex found when rebuilding triangles.");
176 return children[childIndex].
GetIndex(v);
VertexTree(Vector3 b0, Vector3 b1)
Vector3 GetOffset(Vector3 b0, Vector3 b1, int i)
int AddVertex(Vector3 v, int ind)
void AddVertexToLeaf(Vector3 v, int i)
bool FindOrAddVertex(Vector3 v, int ind)
int GetChildIndex(Vector3 v)
static float SQ_THRESHOLD