History

fix repeated and differential traversals

Andrew Meadows committed 9 years ago

Commit 648b8ff1 parent 929d5221 file · +10 −19Browse files

Showing the changes to assignment-client/src/entities/EntityTreeSendThread.cpp (1 of 1 file). Show all

Unified · Split

assignment-client/src/entities/EntityTreeSendThread.cpp+10−19
@@ -25,9 +25,9 @@ void PrioritizedEntity::updatePriority(const ViewFrustum& view) { · 24 unmodified lines
2525 bool success;
2626 AACube cube = entity->getQueryAACube(success);
2727 if (success) {
28− glm::vec3 center = cube.calcCenter() - view.getPosition();
28+ glm::vec3 offset = cube.calcCenter() - view.getPosition();
2929 const float MIN_DISTANCE = 0.001f;
30− float distanceToCenter = glm::length(center) + MIN_DISTANCE;
30+ float distanceToCenter = glm::length(offset) + MIN_DISTANCE;
3131 float distance = distanceToCenter; //- 0.5f * cube.getScale();
3232 if (distance < MIN_DISTANCE) {
3333 // this object's bounding box overlaps the camera --> give it a big priority
@@ -35,8 +35,8 @@ void PrioritizedEntity::updatePriority(const ViewFrustum& view) { · 1 unmodified line
3535 } else {
3636 // NOTE: we assume view.aspectRatio < 1.0 (view width greater than height)
3737 // so we only check against the larger (horizontal) view angle
38− float front = glm::dot(center, view.getDirection()) / distanceToCenter;
39− if (front > cosf(view.getFieldOfView()) || distance < view.getCenterRadius()) {
38+ float front = glm::dot(offset, view.getDirection()) / distanceToCenter;
39+ if (front > cosf(glm::radians(view.getFieldOfView())) || distance < view.getCenterRadius()) {
4040 _priority = cube.getScale() / distance; // + front;
4141 } else {
4242 _priority = INVALID_ENTITY_SEND_PRIORITY;
@@ -84,15 +84,8 @@ EntityTreeElementPointer TreeTraversalPath::Fork::getNextElementAgain(const View · 41 unmodified lines
8484 ++_nextIndex;
8585 EntityTreeElementPointer element = _weakElement.lock();
8686 assert(element); // should never lose root element
87− if (element->getLastChanged() < oldTime) {
88− _nextIndex = NUMBER_OF_CHILDREN;
89− return EntityTreeElementPointer();
90− }
91− if (element->getLastChanged() > oldTime) {
92− return element;
93− }
94− }
95− if (_nextIndex < NUMBER_OF_CHILDREN) {
87+ return element;
88+ } else if (_nextIndex < NUMBER_OF_CHILDREN) {
9689 EntityTreeElementPointer element = _weakElement.lock();
9790 if (element) {
9891 while (_nextIndex < NUMBER_OF_CHILDREN) {
@@ -115,10 +108,6 @@ EntityTreeElementPointer TreeTraversalPath::Fork::getNextElementDelta(const View · 16 unmodified lines
115108 ++_nextIndex;
116109 EntityTreeElementPointer element = _weakElement.lock();
117110 assert(element); // should never lose root element
118− if (element->getLastChanged() < oldTime) {
119− _nextIndex = NUMBER_OF_CHILDREN;
120− return EntityTreeElementPointer();
121− }
122111 return element;
123112 } else if (_nextIndex < NUMBER_OF_CHILDREN) {
124113 EntityTreeElementPointer element = _weakElement.lock();
@@ -282,13 +271,14 @@ static size_t adebug = 0; · 157 unmodified lines
282271
283272 void EntityTreeSendThread::traverseTreeAndSendContents(SharedNodePointer node, OctreeQueryNode* nodeData,
284273 bool viewFrustumChanged, bool isFullScene) {
285− if (viewFrustumChanged) {
274+ static int foo=0;++foo;bool verbose=(0==(foo%800)); // adebug
275+ if (viewFrustumChanged || verbose) {
286276 ViewFrustum view;
287277 nodeData->copyCurrentViewFrustum(view);
278+ std::cout << "adebug reset view" << std::endl; // adebug
288279 EntityTreeElementPointer root = std::dynamic_pointer_cast<EntityTreeElement>(_myServer->getOctree()->getRoot());
289280 _path.startNewTraversal(view, root);
290281
291− std::cout << "adebug reset view" << std::endl; // adebug
292282 adebug = 0;
293283 }
294284 if (!_path.empty()) {
@@ -321,6 +311,7 @@ void EntityTreeSendThread::traverseTreeAndSendContents(SharedNodePointer node, O · 26 unmodified lines
321311 std::cout << "adebug traverseTreeAndSendContents totalEntities = " << adebug
322312 << " numElements = " << numElements
323313 << " numEntities = " << entities.size()
314+ << " queueSize = " << _sendQueue.size()
324315 << " dt = " << dt1 << std::endl; // adebug
325316 } else if (!_sendQueue.empty()) {
326317 while (!_sendQueue.empty()) {