From 1f08444369c400d7a1a84ebb91d4faa439bb475a Mon Sep 17 00:00:00 2001 From: Nex Pro Date: Sun, 23 Aug 2015 16:21:20 +0100 Subject: [PATCH] Modified the world box to render axes in negative space Also Modified renderDashedLine to accept params for dash len and gap len so we can display negative axes as dashed lines with 500mm dashes and gaps. --- interface/src/Util.cpp | 18 +++++++++++++++++- libraries/render-utils/src/GeometryCache.cpp | 20 ++++++++++---------- libraries/render-utils/src/GeometryCache.h | 11 ++++++----- 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/interface/src/Util.cpp b/interface/src/Util.cpp index 3a01367fc7..cb986e06d5 100644 --- a/interface/src/Util.cpp +++ b/interface/src/Util.cpp @@ -35,17 +35,33 @@ using namespace std; void renderWorldBox(gpu::Batch& batch) { auto geometryCache = DependencyManager::get(); - // Show edge of world + // Show center of world static const glm::vec3 red(1.0f, 0.0f, 0.0f); static const glm::vec3 green(0.0f, 1.0f, 0.0f); static const glm::vec3 blue(0.0f, 0.0f, 1.0f); static const glm::vec3 grey(0.5f, 0.5f, 0.5f); + static const glm::vec4 DASHED_RED(1.0f, 0.0f, 0.0f, 1.0f); + static const glm::vec4 DASHED_GREEN(0.0f, 1.0f, 0.0f, 1.0f); + static const glm::vec4 DASHED_BLUE(0.0f, 0.0f, 1.0f, 1.0f); + static const float DASH_LENGTH = 0.5; + static const float GAP_LENGTH = 0.5; auto transform = Transform{}; + batch.setModelTransform(transform); + geometryCache->renderLine(batch, glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(TREE_SCALE, 0.0f, 0.0f), red); + geometryCache->renderDashedLine(batch, glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(-TREE_SCALE, 0.0f, 0.0f), DASHED_RED, + DASH_LENGTH, GAP_LENGTH); + geometryCache->renderLine(batch, glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, TREE_SCALE, 0.0f), green); + geometryCache->renderDashedLine(batch, glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, -TREE_SCALE, 0.0f), DASHED_GREEN, + DASH_LENGTH, GAP_LENGTH); + geometryCache->renderLine(batch, glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 0.0f, TREE_SCALE), blue); + geometryCache->renderDashedLine(batch, glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 0.0f, -TREE_SCALE), DASHED_BLUE, + DASH_LENGTH, GAP_LENGTH); + geometryCache->renderLine(batch, glm::vec3(0.0f, 0.0f, TREE_SCALE), glm::vec3(TREE_SCALE, 0.0f, TREE_SCALE), grey); geometryCache->renderLine(batch, glm::vec3(TREE_SCALE, 0.0f, TREE_SCALE), glm::vec3(TREE_SCALE, 0.0f, 0.0f), grey); diff --git a/libraries/render-utils/src/GeometryCache.cpp b/libraries/render-utils/src/GeometryCache.cpp index 31b030f75a..6801ee8cdc 100644 --- a/libraries/render-utils/src/GeometryCache.cpp +++ b/libraries/render-utils/src/GeometryCache.cpp @@ -64,7 +64,7 @@ void GeometryCache::renderSphere(gpu::Batch& batch, float radius, int slices, in int vertices = slices * (stacks - 1) + 2; int indices = slices * (stacks - 1) * NUM_VERTICES_PER_TRIANGULATED_QUAD; - + if ((registered && (!_registeredSphereVertices.contains(id) || _lastRegisteredSphereVertices[id] != radiusKey)) || (!registered && !_sphereVertices.contains(radiusKey))) { @@ -74,7 +74,7 @@ void GeometryCache::renderSphere(gpu::Batch& batch, float radius, int slices, in qCDebug(renderutils) << "renderSphere()... RELEASING REGISTERED VERTICES BUFFER"; #endif } - + auto verticesBuffer = std::make_shared(); if (registered) { _registeredSphereVertices[id] = verticesBuffer; @@ -128,7 +128,7 @@ void GeometryCache::renderSphere(gpu::Batch& batch, float radius, int slices, in qCDebug(renderutils) << "renderSphere()... REUSING PREVIOUSLY REGISTERED VERTICES BUFFER"; } #endif - + if ((registered && (!_registeredSphereIndices.contains(id) || _lastRegisteredSphereIndices[id] != slicesStacksKey)) || (!registered && !_sphereIndices.contains(slicesStacksKey))) { @@ -1321,7 +1321,9 @@ void GeometryCache::renderQuad(gpu::Batch& batch, const glm::vec3& topLeft, cons batch.draw(gpu::TRIANGLE_STRIP, 4, 0); } -void GeometryCache::renderDashedLine(gpu::Batch& batch, const glm::vec3& start, const glm::vec3& end, const glm::vec4& color, int id) { +void GeometryCache::renderDashedLine(gpu::Batch& batch, const glm::vec3& start, const glm::vec3& end, const glm::vec4& color, + const float dash_length, const float gap_length, int id) { + bool registered = (id != UNKNOWN_ID); Vec3PairVec2Pair key(Vec3Pair(start, end), Vec2Pair(glm::vec2(color.x, color.y), glm::vec2(color.z, color.w))); BatchItemDetails& details = registered ? _registeredDashedLines[id] : _dashedLines[key]; @@ -1345,16 +1347,14 @@ void GeometryCache::renderDashedLine(gpu::Batch& batch, const glm::vec3& start, ((int(color.w * 255.0f) & 0xFF) << 24); // draw each line segment with appropriate gaps - const float DASH_LENGTH = 0.05f; - const float GAP_LENGTH = 0.025f; - const float SEGMENT_LENGTH = DASH_LENGTH + GAP_LENGTH; + const float SEGMENT_LENGTH = dash_length + gap_length; float length = glm::distance(start, end); float segmentCount = length / SEGMENT_LENGTH; int segmentCountFloor = (int)glm::floor(segmentCount); glm::vec3 segmentVector = (end - start) / segmentCount; - glm::vec3 dashVector = segmentVector / SEGMENT_LENGTH * DASH_LENGTH; - glm::vec3 gapVector = segmentVector / SEGMENT_LENGTH * GAP_LENGTH; + glm::vec3 dashVector = segmentVector / SEGMENT_LENGTH * dash_length; + glm::vec3 gapVector = segmentVector / SEGMENT_LENGTH * gap_length; const int FLOATS_PER_VERTEX = 3; details.vertices = (segmentCountFloor + 1) * 2; @@ -1388,7 +1388,7 @@ void GeometryCache::renderDashedLine(gpu::Batch& batch, const glm::vec3& start, *(vertex++) = point.y; *(vertex++) = point.z; *(colorDataAt++) = compactColor; - + for (int i = 0; i < segmentCountFloor; i++) { point += dashVector; *(vertex++) = point.x; diff --git a/libraries/render-utils/src/GeometryCache.h b/libraries/render-utils/src/GeometryCache.h index f70eae6380..2545822c07 100644 --- a/libraries/render-utils/src/GeometryCache.h +++ b/libraries/render-utils/src/GeometryCache.h @@ -179,7 +179,8 @@ public: void renderLine(gpu::Batch& batch, const glm::vec3& p1, const glm::vec3& p2, const glm::vec4& color1, const glm::vec4& color2, int id = UNKNOWN_ID); - void renderDashedLine(gpu::Batch& batch, const glm::vec3& start, const glm::vec3& end, const glm::vec4& color, int id = UNKNOWN_ID); + void renderDashedLine(gpu::Batch& batch, const glm::vec3& start, const glm::vec3& end, const glm::vec4& color, + const float dash_length = 0.05f, const float gap_length = 0.025f, int id = UNKNOWN_ID); void renderLine(gpu::Batch& batch, const glm::vec2& p1, const glm::vec2& p2, const glm::vec3& color, int id = UNKNOWN_ID) { renderLine(batch, p1, p2, glm::vec4(color, 1.0f), id); } @@ -189,9 +190,9 @@ public: void renderLine(gpu::Batch& batch, const glm::vec2& p1, const glm::vec2& p2, - const glm::vec3& color1, const glm::vec3& color2, int id = UNKNOWN_ID) + const glm::vec3& color1, const glm::vec3& color2, int id = UNKNOWN_ID) { renderLine(batch, p1, p2, glm::vec4(color1, 1.0f), glm::vec4(color2, 1.0f), id); } - + void renderLine(gpu::Batch& batch, const glm::vec2& p1, const glm::vec2& p2, const glm::vec4& color1, const glm::vec4& color2, int id = UNKNOWN_ID); @@ -216,7 +217,7 @@ protected: private: GeometryCache(); virtual ~GeometryCache(); - + typedef QPair IntPair; typedef QPair VerticesIndices; @@ -247,7 +248,7 @@ private: ~BatchItemDetails(); void clear(); }; - + QHash _coneVBOs; int _nextID;