summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-11-06 11:33:54 +0100
committerPaul Lemire <paul.lemire@kdab.com>2015-11-16 11:17:44 +0000
commit2a434eb4431341d223bed40e75ef5f144446fda4 (patch)
tree6a49a74585082d94a8806d1f0a00b1479f7d7e1c
parent680eeef20c993227a880efc0212414154d047b13 (diff)
CalcBoundingVolume: don't go through the BBox intermediate step
Change-Id: I9a929e776151f81b91fbbaf6631938fca03c7e1f Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r--src/render/jobs/calcboundingvolumejob.cpp10
1 files changed, 1 insertions, 9 deletions
diff --git a/src/render/jobs/calcboundingvolumejob.cpp b/src/render/jobs/calcboundingvolumejob.cpp
index f6d9be118..ca91ac547 100644
--- a/src/render/jobs/calcboundingvolumejob.cpp
+++ b/src/render/jobs/calcboundingvolumejob.cpp
@@ -100,16 +100,12 @@ void calculateLocalBoundingVolume(Renderer *renderer, Entity *node)
return;
}
- Qt3DCore::QAxisAlignedBoundingBox bbox;
const QByteArray buffer = buf->data();
const char *rawBuffer = buffer.constData();
rawBuffer += pickVolumeAttribute->byteOffset();
const int stride = pickVolumeAttribute->byteStride() ? pickVolumeAttribute->byteStride() : sizeof(float) * pickVolumeAttribute->dataSize();
QVector<QVector3D> vertices(pickVolumeAttribute->count());
- // TO DO: We don't need to create a vector of QVector3D
- // to build bbox used to then build a sphere, we could build the sphere
- // by just looking at the vertices using more efficient algorithms (EPOS, Ritters)
for (int c = 0, vC = vertices.size(); c < vC; ++c) {
QVector3D v;
const float *fptr = reinterpret_cast<const float*>(rawBuffer);
@@ -118,12 +114,8 @@ void calculateLocalBoundingVolume(Renderer *renderer, Entity *node)
vertices[c] = v;
rawBuffer += stride;
}
- //Phase 1
- bbox.update(vertices);
- //Phase 2
- node->localBoundingVolume()->setCenter(bbox.center());
- node->localBoundingVolume()->setRadius(bbox.maxExtent() * 0.5f);
+ node->localBoundingVolume()->initializeFromPoints(vertices);
}
}
}