From 9ba39c3a84cb3db1a2999757fdcde5cfb63a9d10 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Tue, 15 Oct 2013 12:05:54 -0700 Subject: [PATCH] removed center from AABox to further save memory --- .../src/VoxelSendThread.cpp | 7 ------- libraries/voxels/src/AABox.cpp | 9 ++++++--- libraries/voxels/src/AABox.h | 12 ++++-------- libraries/voxels/src/ViewFrustum.cpp | 17 ++--------------- libraries/voxels/src/ViewFrustum.h | 6 ------ libraries/voxels/src/VoxelNode.cpp | 6 +++--- libraries/voxels/src/VoxelNode.h | 5 ++--- 7 files changed, 17 insertions(+), 45 deletions(-) diff --git a/libraries/voxel-server-library/src/VoxelSendThread.cpp b/libraries/voxel-server-library/src/VoxelSendThread.cpp index f12577bd2f..961712a46f 100644 --- a/libraries/voxel-server-library/src/VoxelSendThread.cpp +++ b/libraries/voxel-server-library/src/VoxelSendThread.cpp @@ -53,13 +53,6 @@ bool VoxelSendThread::process() { } } - // some debugging... - printf("ViewFrustum::getProjectedPolygonTime=%llu ViewFrustum::getProjectedPolygonCalls=%llu\n", - ViewFrustum::getProjectedPolygonTime, ViewFrustum::getProjectedPolygonCalls); - - printf("ViewFrustum::getFurthestPointFromCameraTime=%llu ViewFrustum::getFurthestPointFromCameraCalls=%llu\n", - ViewFrustum::getFurthestPointFromCameraTime, ViewFrustum::getFurthestPointFromCameraCalls); - return isStillRunning(); // keep running till they terminate us } diff --git a/libraries/voxels/src/AABox.cpp b/libraries/voxels/src/AABox.cpp index 24f6384aee..50b0958ae4 100644 --- a/libraries/voxels/src/AABox.cpp +++ b/libraries/voxels/src/AABox.cpp @@ -20,6 +20,12 @@ AABox::AABox(const glm::vec3& corner, float size) : AABox::AABox() : _corner(0,0,0), _scale(0) { }; +glm::vec3 AABox::calcCenter() const { + glm::vec3 center(_corner); + center += (glm::vec3(_scale, _scale, _scale) * 0.5f); + return center; +} + glm::vec3 AABox::calcTopFarLeft() const { glm::vec3 topFarLeft(_corner); topFarLeft += glm::vec3(_scale, _scale, _scale); @@ -28,11 +34,9 @@ glm::vec3 AABox::calcTopFarLeft() const { void AABox::scale(float scale) { _corner = _corner * scale; - _center = _center * scale; _scale = _scale * scale; } - glm::vec3 AABox::getVertex(BoxVertex vertex) const { switch (vertex) { case BOTTOM_LEFT_NEAR: @@ -57,7 +61,6 @@ glm::vec3 AABox::getVertex(BoxVertex vertex) const { void AABox::setBox(const glm::vec3& corner, float scale) { _corner = corner; _scale = scale; - _center = _corner + (glm::vec3(_scale, _scale, _scale) * 0.5f); } glm::vec3 AABox::getVertexP(const glm::vec3& normal) const { diff --git a/libraries/voxels/src/AABox.h b/libraries/voxels/src/AABox.h index b08f94df5c..c6ae5c98c3 100644 --- a/libraries/voxels/src/AABox.h +++ b/libraries/voxels/src/AABox.h @@ -36,11 +36,9 @@ enum BoxVertex { const int FACE_COUNT = 6; -class AABox -{ +class AABox { public: - AABox(const glm::vec3& corner, float size); AABox(); ~AABox() {}; @@ -54,11 +52,11 @@ public: void scale(float scale); const glm::vec3& getCorner() const { return _corner; }; - const glm::vec3& getCenter() const { return _center; }; - - glm::vec3 calcTopFarLeft() const; float getScale() const { return _scale; } + glm::vec3 calcCenter() const; + glm::vec3 calcTopFarLeft() const; + glm::vec3 getVertex(BoxVertex vertex) const; bool contains(const glm::vec3& point) const; @@ -70,7 +68,6 @@ public: bool findCapsulePenetration(const glm::vec3& start, const glm::vec3& end, float radius, glm::vec3& penetration) const; private: - glm::vec3 getClosestPointOnFace(const glm::vec3& point, BoxFace face) const; glm::vec3 getClosestPointOnFace(const glm::vec4& origin, const glm::vec4& direction, BoxFace face) const; glm::vec4 getPlane(BoxFace face) const; @@ -78,7 +75,6 @@ private: static BoxFace getOppositeFace(BoxFace face); glm::vec3 _corner; - glm::vec3 _center; float _scale; }; diff --git a/libraries/voxels/src/ViewFrustum.cpp b/libraries/voxels/src/ViewFrustum.cpp index 3733442e9c..05380c9e4a 100644 --- a/libraries/voxels/src/ViewFrustum.cpp +++ b/libraries/voxels/src/ViewFrustum.cpp @@ -541,14 +541,7 @@ const int hullVertexLookup[MAX_POSSIBLE_COMBINATIONS][MAX_PROJECTED_POLYGON_VERT {6, TOP_RIGHT_NEAR, TOP_RIGHT_FAR, BOTTOM_RIGHT_FAR, BOTTOM_LEFT_FAR, BOTTOM_LEFT_NEAR, TOP_LEFT_NEAR}, // back, top, left }; -uint64_t ViewFrustum::getProjectedPolygonTime = 0; -uint64_t ViewFrustum::getProjectedPolygonCalls = 0; -#include - VoxelProjectedPolygon ViewFrustum::getProjectedPolygon(const AABox& box) const { - getProjectedPolygonCalls++; - PerformanceWarning(false, "ViewFrustum::getProjectedPolygon", false, &getProjectedPolygonTime); - const glm::vec3& bottomNearRight = box.getCorner(); glm::vec3 topFarLeft = box.calcTopFarLeft(); @@ -604,7 +597,7 @@ VoxelProjectedPolygon ViewFrustum::getProjectedPolygon(const AABox& box) const { ***/ } // set the distance from our camera position, to the closest vertex - float distance = glm::distance(getPosition(), box.getCenter()); + float distance = glm::distance(getPosition(), box.calcCenter()); projectedPolygon.setDistance(distance); projectedPolygon.setAnyInView(anyPointsInView); projectedPolygon.setAllInView(allPointsInView); @@ -613,18 +606,12 @@ VoxelProjectedPolygon ViewFrustum::getProjectedPolygon(const AABox& box) const { } -uint64_t ViewFrustum::getFurthestPointFromCameraTime = 0; -uint64_t ViewFrustum::getFurthestPointFromCameraCalls = 0; - // Similar strategy to getProjectedPolygon() we use the knowledge of camera position relative to the // axis-aligned voxels to determine which of the voxels vertices must be the furthest. No need for // squares and square-roots. Just compares. glm::vec3 ViewFrustum::getFurthestPointFromCamera(const AABox& box) const { - getFurthestPointFromCameraCalls++; - PerformanceWarning(false, "ViewFrustum::getFurthestPointFromCamera", false, &getFurthestPointFromCameraTime); - - const glm::vec3& center = box.getCenter(); const glm::vec3& bottomNearRight = box.getCorner(); + glm::vec3 center = box.calcCenter(); glm::vec3 topFarLeft = box.calcTopFarLeft(); glm::vec3 furthestPoint; diff --git a/libraries/voxels/src/ViewFrustum.h b/libraries/voxels/src/ViewFrustum.h index d3341ede23..9a3c69ca7c 100644 --- a/libraries/voxels/src/ViewFrustum.h +++ b/libraries/voxels/src/ViewFrustum.h @@ -96,13 +96,7 @@ public: VoxelProjectedPolygon getProjectedPolygon(const AABox& box) const; glm::vec3 getFurthestPointFromCamera(const AABox& box) const; - static uint64_t getProjectedPolygonTime; - static uint64_t getProjectedPolygonCalls; - static uint64_t getFurthestPointFromCameraTime; - static uint64_t getFurthestPointFromCameraCalls; - private: - // Used for keyhole calculations ViewFrustum::location pointInKeyhole(const glm::vec3& point) const; ViewFrustum::location sphereInKeyhole(const glm::vec3& center, float radius) const; diff --git a/libraries/voxels/src/VoxelNode.cpp b/libraries/voxels/src/VoxelNode.cpp index 6c45bde441..c7b5c9e7e6 100644 --- a/libraries/voxels/src/VoxelNode.cpp +++ b/libraries/voxels/src/VoxelNode.cpp @@ -394,20 +394,20 @@ float VoxelNode::furthestDistanceToCamera(const ViewFrustum& viewFrustum) const } float VoxelNode::distanceToCamera(const ViewFrustum& viewFrustum) const { - glm::vec3 center = _box.getCenter() * (float)TREE_SCALE; + glm::vec3 center = _box.calcCenter() * (float)TREE_SCALE; glm::vec3 temp = viewFrustum.getPosition() - center; float distanceToVoxelCenter = sqrtf(glm::dot(temp, temp)); return distanceToVoxelCenter; } float VoxelNode::distanceSquareToPoint(const glm::vec3& point) const { - glm::vec3 temp = point - _box.getCenter(); + glm::vec3 temp = point - _box.calcCenter(); float distanceSquare = glm::dot(temp, temp); return distanceSquare; } float VoxelNode::distanceToPoint(const glm::vec3& point) const { - glm::vec3 temp = point - _box.getCenter(); + glm::vec3 temp = point - _box.calcCenter(); float distance = sqrtf(glm::dot(temp, temp)); return distance; } diff --git a/libraries/voxels/src/VoxelNode.h b/libraries/voxels/src/VoxelNode.h index 2cd3c90389..2fe3507669 100644 --- a/libraries/voxels/src/VoxelNode.h +++ b/libraries/voxels/src/VoxelNode.h @@ -53,10 +53,9 @@ public: bool collapseIdenticalLeaves(); const AABox& getAABox() const { return _box; } - const glm::vec3& getCenter() const { return _box.getCenter(); } const glm::vec3& getCorner() const { return _box.getCorner(); } - float getScale() const { return _box.getScale(); } // voxelScale = (1 / powf(2, *node->getOctalCode())); } - int getLevel() const { return *_octalCode + 1; } // one based or zero based? this doesn't correctly handle 2 byte case + float getScale() const { return _box.getScale(); } + int getLevel() const { return numberOfThreeBitSectionsInCode(getOctalCode()) + 1; } float getEnclosingRadius() const;