From 7ce0b3c000058769b94c777a7b0e29c6b52df16b Mon Sep 17 00:00:00 2001 From: Martin Felis Date: Sun, 22 Jan 2017 20:51:12 +0100 Subject: [PATCH] Added debugDrawCircle and refactored debugDrawSphere --- src/modules/CharacterModule.cc | 6 ++- src/modules/RenderModule.cc | 75 +++++++++++++++++++--------------- src/modules/RenderModule.h | 12 +++++- 3 files changed, 56 insertions(+), 37 deletions(-) diff --git a/src/modules/CharacterModule.cc b/src/modules/CharacterModule.cc index f796517..f5e3637 100644 --- a/src/modules/CharacterModule.cc +++ b/src/modules/CharacterModule.cc @@ -66,6 +66,8 @@ CharacterEntity::~CharacterEntity() { entity = nullptr; } +static float cur_time = 0.0f; + void CharacterEntity::update(float dt) { Vector3f controller_acceleration ( controller.direction[0] * cGroundAcceleration, @@ -105,7 +107,9 @@ void CharacterEntity::update(float dt) { entity->mesh.updateMatrices(entity->transform.toMatrix()); -// gRenderer->drawDebugSphere (Vector3f (0.f, 0.f, 0.f), 0.2f); + cur_time += dt; + + gRenderer->drawDebugSphere (Vector3f (0.f, 1.3 + sin(cur_time * 2.f), 0.f), 2.2f); } void ShowCharacterPropertiesWindow (CharacterEntity* character) { diff --git a/src/modules/RenderModule.cc b/src/modules/RenderModule.cc index 40ed8ec..72d7080 100644 --- a/src/modules/RenderModule.cc +++ b/src/modules/RenderModule.cc @@ -1621,46 +1621,29 @@ void Renderer::paintGL() { line.colors.push_back(debugCommands[i].color); line.UpdateBuffers(); - } else if (debugCommands[i].type == DebugCommand::Sphere) { + } else if (debugCommands[i].type == DebugCommand::Circle) { line.points.clear(); line.colors.clear(); - - float radius = debugCommands[i].to[0]; + float radius = debugCommands[i].radius; float c,s,angle; - const int cNumSegments = 64; - // circle in X-Y plane + // construct an orthogonal vector from the normal. + Vector3f plane1 ( + debugCommands[i].to[1] - debugCommands[i].to[2], + debugCommands[i].to[0], + -debugCommands[i].to[0] + ); + plane1.normalize(); + Vector3f plane2 = debugCommands[i].to.cross(plane1); + + const int cNumSegments = 64; for (uint32_t j = 0; j < cNumSegments; j++) { angle = M_PI * 0.5f + 2. * M_PI * static_cast(j) / static_cast(cNumSegments - 1); s = sin(angle) * radius; c = cos(angle) * radius; - line.points.push_back(Vector3f(s, c, 0)); - line.colors.push_back(debugCommands[i].color); - } - - // circle in X-Z plane (note: we draw the circle an - // additional 90 degrees so that we can directly start - // the last circle. - for (uint32_t j = 0; j < cNumSegments; j++) { - angle = M_PI * 0.5f + 2.5 * M_PI * static_cast(j) / static_cast(cNumSegments - 1); - - s = sin(angle) * radius; - c = cos(angle) * radius; - - line.points.push_back(Vector3f(s, 0, c)); - line.colors.push_back(debugCommands[i].color); - } - - // circle in Y-Z plane - for (uint32_t j = 0; j < cNumSegments; j++) { - angle = M_PI + 2. * M_PI * static_cast(j) / static_cast(cNumSegments - 1); - - s = sin(angle) * radius; - c = cos(angle) * radius; - - line.points.push_back(Vector3f(0, s, c)); + line.points.push_back(debugCommands[i].from + plane1 * s + plane2 * c); line.colors.push_back(debugCommands[i].color); } @@ -1832,6 +1815,7 @@ void Renderer::drawDebugLine ( const Vector3f &to, const Vector3f &color) { DebugCommand cmd; + cmd.type = DebugCommand::Line; cmd.from = from; cmd.to = to; @@ -1850,17 +1834,40 @@ void Renderer::drawDebugAxes ( drawDebugLine (pos, pos + Vector3f (orientation.block<3,1>(0,2)) * scale, Vector3f (0.f, 0.f, 1.f)); } -void Renderer::drawDebugSphere ( +void Renderer::drawDebugCircle ( const Vector3f &pos, - float radius, + const Vector3f &normal, + const float radius, const Vector4f &color) { DebugCommand cmd; - cmd.type = DebugCommand::Sphere; + cmd.type = DebugCommand::Circle; cmd.from = pos; - cmd.to[0] = radius; + cmd.to = normal; cmd.color = color; + cmd.radius = radius; debugCommands.push_back(cmd); } +void Renderer::drawDebugSphere ( + const Vector3f &pos, + float radius, + const Vector4f &color) { + drawDebugCircle ( + pos, + Vector3f (1.0f, 0.0f, 0.0f), + radius, + color); + drawDebugCircle ( + pos, + Vector3f (0.0f, 1.0f, 0.0f), + radius, + color); + drawDebugCircle ( + pos, + Vector3f (0.0f, 0.0f, 1.0f), + radius, + color); +} + diff --git a/src/modules/RenderModule.h b/src/modules/RenderModule.h index 696ce16..1724f63 100644 --- a/src/modules/RenderModule.h +++ b/src/modules/RenderModule.h @@ -333,12 +333,14 @@ struct DebugCommand { enum CommandType { Line, Axes, - Sphere + Circle, + Invalid }; CommandType type; Vector3f from; + float radius; Vector3f to; Vector4f color = Vector4f(1.f, 1.f, 1.f, 1.f); }; @@ -413,9 +415,15 @@ struct Renderer { const Matrix33f &orientation, const float &scale); + void drawDebugCircle ( + const Vector3f &pos, + const Vector3f &normal, + const float radius, + const Vector4f &color = Vector4f (1.f, 1.f, 1.f, 1.f)); + void drawDebugSphere ( const Vector3f &pos, - float radius, + const float radius, const Vector4f &color = Vector4f(1.f, 1.f, 1.f, 1.f)); };