44 NodeTriangleCallback& operator=(NodeTriangleCallback& other)
50 NodeTriangleCallback(
NodeArray& triangleNodes)
51 :m_triangleNodes(triangleNodes)
55 virtual void internalProcessTriangleIndex(
btVector3* triangle,
int partId,
int triangleIndex)
61 aabbMin.
setMin(triangle[0]);
62 aabbMax.
setMax(triangle[0]);
63 aabbMin.
setMin(triangle[1]);
64 aabbMax.
setMax(triangle[1]);
65 aabbMin.
setMin(triangle[2]);
66 aabbMax.
setMax(triangle[2]);
77 m_triangleNodes.push_back(node);
85 QuantizedNodeTriangleCallback& operator=(QuantizedNodeTriangleCallback& other)
87 m_triangleNodes.copyFromArray(other.m_triangleNodes);
88 m_optimizedTree = other.m_optimizedTree;
93 :m_triangleNodes(triangleNodes),m_optimizedTree(tree)
97 virtual void internalProcessTriangleIndex(
btVector3* triangle,
int partId,
int triangleIndex)
109 aabbMin.
setMin(triangle[0]);
110 aabbMax.
setMax(triangle[0]);
111 aabbMin.
setMin(triangle[1]);
112 aabbMax.
setMax(triangle[1]);
113 aabbMin.
setMin(triangle[2]);
114 aabbMax.
setMax(triangle[2]);
119 if (aabbMax.
x() - aabbMin.
x() < MIN_AABB_DIMENSION)
121 aabbMax.
setX(aabbMax.
x() + MIN_AABB_HALF_DIMENSION);
122 aabbMin.
setX(aabbMin.
x() - MIN_AABB_HALF_DIMENSION);
124 if (aabbMax.
y() - aabbMin.
y() < MIN_AABB_DIMENSION)
126 aabbMax.
setY(aabbMax.
y() + MIN_AABB_HALF_DIMENSION);
127 aabbMin.
setY(aabbMin.
y() - MIN_AABB_HALF_DIMENSION);
129 if (aabbMax.
z() - aabbMin.
z() < MIN_AABB_DIMENSION)
131 aabbMax.
setZ(aabbMax.
z() + MIN_AABB_HALF_DIMENSION);
132 aabbMin.
setZ(aabbMin.
z() - MIN_AABB_HALF_DIMENSION);
140 m_triangleNodes.push_back(node);
146 int numLeafNodes = 0;
249 unsigned short quantizedQueryAabbMin[3];
250 unsigned short quantizedQueryAabbMax[3];
252 quantize(&quantizedQueryAabbMin[0],aabbMin,0);
253 quantize(&quantizedQueryAabbMax[0],aabbMax,1);
278 int curNodeSubPart=-1;
281 const unsigned char *vertexbase = 0;
285 const unsigned char *indexbase = 0;
295 for (i=endNode-1;i>=firstNode;i--)
305 if (nodeSubPart != curNodeSubPart)
307 if (curNodeSubPart >= 0)
311 curNodeSubPart = nodeSubPart;
316 unsigned int* gfxbase = (
unsigned int*)(indexbase+nodeTriangleIndex*indexstride);
319 for (
int j=2;j>=0;j--)
322 int graphicsindex = indicestype==
PHY_SHORT?((
unsigned short*)gfxbase)[j]:gfxbase[j];
325 float* graphicsbase = (
float*)(vertexbase+graphicsindex*stride);
327 graphicsbase[0]*meshScaling.
getX(),
328 graphicsbase[1]*meshScaling.
getY(),
329 graphicsbase[2]*meshScaling.
getZ());
333 double* graphicsbase = (
double*)(vertexbase+graphicsindex*stride);
342 aabbMin.
setMin(triangleVerts[0]);
343 aabbMax.
setMax(triangleVerts[0]);
344 aabbMin.
setMin(triangleVerts[1]);
345 aabbMax.
setMax(triangleVerts[1]);
346 aabbMin.
setMin(triangleVerts[2]);
347 aabbMax.
setMax(triangleVerts[2]);
363 for (
int i=0;i<3;i++)
378 if (curNodeSubPart >= 0)