From 69e279e2c6d381f4588e38268a0c1ed06aa4feb5 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 29 Apr 2014 14:05:16 -0700 Subject: [PATCH 1/5] IC-1, remove some spaces in BuckyBalls --- interface/src/BuckyBalls.h | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/interface/src/BuckyBalls.h b/interface/src/BuckyBalls.h index f7690408d3..d46245c9bf 100644 --- a/interface/src/BuckyBalls.h +++ b/interface/src/BuckyBalls.h @@ -23,7 +23,6 @@ #include "InterfaceConfig.h" #include "Util.h" - const int NUM_BBALLS = 200; class BuckyBalls { @@ -42,9 +41,7 @@ private: float _bballRadius[NUM_BBALLS]; float _bballColliding[NUM_BBALLS]; int _bballElement[NUM_BBALLS]; - int _bballIsGrabbed[2]; - - + int _bballIsGrabbed[2]; }; #endif // hifi_BuckyBalls_h From 5aabd302fc2e8edc9b7b1246fa44e36108d3ff41 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Mon, 5 May 2014 12:35:49 -0700 Subject: [PATCH 2/5] tweaks to placeModelsWithHands --- examples/placeModelsWithHands.js | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/examples/placeModelsWithHands.js b/examples/placeModelsWithHands.js index cffc6bd3c9..a6b59ff5c3 100644 --- a/examples/placeModelsWithHands.js +++ b/examples/placeModelsWithHands.js @@ -53,7 +53,7 @@ var numModels = modelURLs.length; function keyPressEvent(event) { - //print("event.text=" + event.text); + debugPrint("event.text=" + event.text); if (event.text == "ESC") { if (leftRecentlyDeleted) { leftRecentlyDeleted = false; @@ -63,7 +63,7 @@ function keyPressEvent(event) { rightRecentlyDeleted = false; rightModelAlreadyInHand = false; } - } else if (event.text == "DELETE") { + } else if (event.text == "DELETE" || event.text == "BACKSPACE") { if (leftModelAlreadyInHand) { print("want to delete leftHandModel=" + leftHandModel); Models.deleteModel(leftHandModel); @@ -122,6 +122,7 @@ function checkControllerSide(whichSide) { var BUTTON_FWD; var BUTTON_3; var palmPosition; + var palmRotation; var modelAlreadyInHand; var handMessage; @@ -129,12 +130,14 @@ function checkControllerSide(whichSide) { BUTTON_FWD = LEFT_BUTTON_FWD; BUTTON_3 = LEFT_BUTTON_3; palmPosition = Controller.getSpatialControlPosition(LEFT_PALM); + palmRotation = Controller.getSpatialControlRawRotation(LEFT_PALM); modelAlreadyInHand = leftModelAlreadyInHand; handMessage = "LEFT"; } else { BUTTON_FWD = RIGHT_BUTTON_FWD; BUTTON_3 = RIGHT_BUTTON_3; palmPosition = Controller.getSpatialControlPosition(RIGHT_PALM); + palmRotation = Controller.getSpatialControlRawRotation(RIGHT_PALM); modelAlreadyInHand = rightModelAlreadyInHand; handMessage = "RIGHT"; } @@ -149,8 +152,7 @@ function checkControllerSide(whichSide) { if (closestModel.isKnownID) { - //debugPrint - print(handMessage + " HAND- CAUGHT SOMETHING!!"); + debugPrint(handMessage + " HAND- CAUGHT SOMETHING!!"); if (whichSide == LEFT_PALM) { leftModelAlreadyInHand = true; @@ -165,9 +167,10 @@ function checkControllerSide(whichSide) { y: modelPosition.y, z: modelPosition.z }, radius: modelRadius, + modelRotation: palmRotation, }; - print(">>>>>>>>>>>> EDIT MODEL.... modelRadius=" +modelRadius); + debugPrint(">>>>>>>>>>>> EDIT MODEL.... modelRadius=" +modelRadius); Models.editModel(closestModel, properties); @@ -189,10 +192,11 @@ function checkControllerSide(whichSide) { y: modelPosition.y, z: modelPosition.z }, radius: modelRadius, + modelRotation: palmRotation, modelURL: modelURLs[currentModelURL] }; - print("modelRadius=" +modelRadius); + debugPrint("modelRadius=" +modelRadius); newModel = Models.addModel(properties); if (whichSide == LEFT_PALM) { @@ -225,16 +229,16 @@ function checkControllerSide(whichSide) { // If holding the model keep it in the palm if (grabButtonPressed) { - //debugPrint - print(">>>>> " + handMessage + "-MODEL IN HAND, grabbing, hold and move"); + debugPrint(">>>>> " + handMessage + "-MODEL IN HAND, grabbing, hold and move"); var modelPosition = getModelHoldPosition(whichSide); var properties = { position: { x: modelPosition.x, y: modelPosition.y, z: modelPosition.z }, radius: modelRadius, + modelRotation: palmRotation, }; - print(">>>>>>>>>>>> EDIT MODEL.... modelRadius=" +modelRadius); + debugPrint(">>>>>>>>>>>> EDIT MODEL.... modelRadius=" +modelRadius); Models.editModel(handModel, properties); } else { From befe75a04c37aa6c484c81fa326f4d99b7562c65 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 5 May 2014 14:03:14 -0700 Subject: [PATCH 3/5] fix broken audio-mixer stats --- assignment-client/src/audio/AudioMixer.cpp | 2 +- domain-server/src/DomainServer.cpp | 1 + libraries/networking/src/NodeList.cpp | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index 5fd9efedd7..63b2083aae 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -369,7 +369,7 @@ void AudioMixer::sendStatsPacket() { statsObject["average_mixes_per_listener"] = 0.0; } -// ThreadedAssignment::addPacketStatsAndSendStatsPacket(statsObject); + ThreadedAssignment::addPacketStatsAndSendStatsPacket(statsObject); _sumListeners = 0; _sumMixes = 0; diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index d9927f3833..fa581290b6 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -796,6 +796,7 @@ void DomainServer::processDatagram(const QByteArray& receivedPacket, const HifiS sendDomainListToNode(checkInNode, senderSockAddr, nodeInterestListFromPacket(receivedPacket, numNodeInfoBytes)); } } else if (requestType == PacketTypeNodeJsonStats) { + qDebug() << "Trying to match a stats packet"; SharedNodePointer matchingNode = nodeList->sendingNodeForPacket(receivedPacket); if (matchingNode) { reinterpret_cast(matchingNode->getLinkedData())->parseJSONStatsPacket(receivedPacket); diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index d5c02f8eed..e3d113a1b5 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -79,7 +79,7 @@ qint64 NodeList::sendStatsToDomainServer(const QJsonObject& statsObject) { statsPacketStream << statsObject.toVariantMap(); - return writeDatagram(statsPacket, _domainHandler.getSockAddr(), QUuid()); + return writeUnverifiedDatagram(statsPacket, _domainHandler.getSockAddr()); } void NodeList::timePingReply(const QByteArray& packet, const SharedNodePointer& sendingNode) { From 14c7e28dc8e62440f0aad1b362e2523a6a6324ee Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 5 May 2014 14:04:09 -0700 Subject: [PATCH 4/5] remove a comment for node stats in DS --- domain-server/src/DomainServer.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index fa581290b6..d9927f3833 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -796,7 +796,6 @@ void DomainServer::processDatagram(const QByteArray& receivedPacket, const HifiS sendDomainListToNode(checkInNode, senderSockAddr, nodeInterestListFromPacket(receivedPacket, numNodeInfoBytes)); } } else if (requestType == PacketTypeNodeJsonStats) { - qDebug() << "Trying to match a stats packet"; SharedNodePointer matchingNode = nodeList->sendingNodeForPacket(receivedPacket); if (matchingNode) { reinterpret_cast(matchingNode->getLinkedData())->parseJSONStatsPacket(receivedPacket); From b10d9e39036a14c253c2534ed9167278694bea6d Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Mon, 5 May 2014 14:26:51 -0700 Subject: [PATCH 5/5] add LOD support for model and particle rendering --- interface/src/models/ModelTreeRenderer.cpp | 11 ++++++++++- interface/src/models/ModelTreeRenderer.h | 2 ++ libraries/octree/src/OctreeElement.cpp | 1 + libraries/octree/src/OctreeRenderer.cpp | 11 +++++++---- libraries/octree/src/OctreeRenderer.h | 4 ++++ 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/interface/src/models/ModelTreeRenderer.cpp b/interface/src/models/ModelTreeRenderer.cpp index 0fa434622e..9546c7d1c4 100644 --- a/interface/src/models/ModelTreeRenderer.cpp +++ b/interface/src/models/ModelTreeRenderer.cpp @@ -12,7 +12,7 @@ #include #include "InterfaceConfig.h" - +#include "Menu.h" #include "ModelTreeRenderer.h" ModelTreeRenderer::ModelTreeRenderer() : @@ -118,6 +118,15 @@ void ModelTreeRenderer::renderElement(OctreeElement* element, RenderArgs* args) } } +float ModelTreeRenderer::getSizeScale() const { + return Menu::getInstance()->getVoxelSizeScale(); +} + +int ModelTreeRenderer::getBoundaryLevelAdjust() const { + return Menu::getInstance()->getBoundaryLevelAdjust(); +} + + void ModelTreeRenderer::processEraseMessage(const QByteArray& dataByteArray, const SharedNodePointer& sourceNode) { static_cast(_tree)->processEraseMessage(dataByteArray, sourceNode); } diff --git a/interface/src/models/ModelTreeRenderer.h b/interface/src/models/ModelTreeRenderer.h index a85c408a7b..5ed4720391 100644 --- a/interface/src/models/ModelTreeRenderer.h +++ b/interface/src/models/ModelTreeRenderer.h @@ -36,6 +36,8 @@ public: virtual PacketType getMyQueryMessageType() const { return PacketTypeModelQuery; } virtual PacketType getExpectedPacketType() const { return PacketTypeModelData; } virtual void renderElement(OctreeElement* element, RenderArgs* args); + virtual float getSizeScale() const; + virtual int getBoundaryLevelAdjust() const; void update(); diff --git a/libraries/octree/src/OctreeElement.cpp b/libraries/octree/src/OctreeElement.cpp index 846cf564c2..d54f7aa94b 100644 --- a/libraries/octree/src/OctreeElement.cpp +++ b/libraries/octree/src/OctreeElement.cpp @@ -1208,6 +1208,7 @@ ViewFrustum::location OctreeElement::inFrustum(const ViewFrustum& viewFrustum) c // By doing this, we don't need to test each child voxel's position vs the LOD boundary bool OctreeElement::calculateShouldRender(const ViewFrustum* viewFrustum, float voxelScaleSize, int boundaryLevelAdjust) const { bool shouldRender = false; + if (hasContent()) { float furthestDistance = furthestDistanceToCamera(*viewFrustum); float childBoundary = boundaryDistanceForRenderLevel(getLevel() + 1 + boundaryLevelAdjust, voxelScaleSize); diff --git a/libraries/octree/src/OctreeRenderer.cpp b/libraries/octree/src/OctreeRenderer.cpp index cde1f0923d..5c5da2250f 100644 --- a/libraries/octree/src/OctreeRenderer.cpp +++ b/libraries/octree/src/OctreeRenderer.cpp @@ -140,19 +140,22 @@ void OctreeRenderer::processDatagram(const QByteArray& dataByteArray, const Shar bool OctreeRenderer::renderOperation(OctreeElement* element, void* extraData) { RenderArgs* args = static_cast(extraData); - //if (true || element->isInView(*args->_viewFrustum)) { if (element->isInView(*args->_viewFrustum)) { if (element->hasContent()) { - args->_renderer->renderElement(element, args); + if (element->calculateShouldRender(args->_viewFrustum, args->_sizeScale, args->_boundaryLevelAdjust)) { + args->_renderer->renderElement(element, args); + } else { + return false; // if we shouldn't render, then we also should stop recursing. + } } - return true; + return true; // continue recursing } // if not in view stop recursing return false; } void OctreeRenderer::render() { - RenderArgs args = { 0, this, _viewFrustum }; + RenderArgs args = { 0, this, _viewFrustum, getSizeScale(), getBoundaryLevelAdjust() }; if (_tree) { _tree->lockForRead(); _tree->recurseTreeWithOperation(renderOperation, &args); diff --git a/libraries/octree/src/OctreeRenderer.h b/libraries/octree/src/OctreeRenderer.h index 0337086831..652f9d0399 100644 --- a/libraries/octree/src/OctreeRenderer.h +++ b/libraries/octree/src/OctreeRenderer.h @@ -31,6 +31,8 @@ public: int _renderedItems; OctreeRenderer* _renderer; ViewFrustum* _viewFrustum; + float _sizeScale; + int _boundaryLevelAdjust; }; @@ -46,6 +48,8 @@ public: virtual PacketType getMyQueryMessageType() const = 0; virtual PacketType getExpectedPacketType() const = 0; virtual void renderElement(OctreeElement* element, RenderArgs* args) = 0; + virtual float getSizeScale() const { return DEFAULT_OCTREE_SIZE_SCALE; } + virtual int getBoundaryLevelAdjust() const { return 0; } virtual void setTree(Octree* newTree);