From e1429f383c0e259e49ab68e20c3e06c3e0dc88d6 Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Sun, 7 Feb 2010 12:48:11 +0000 Subject: [PATCH] Some cosmetic improvements to arrows --- src/Points.cpp | 52 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/src/Points.cpp b/src/Points.cpp index 781d440..c2837c5 100644 --- a/src/Points.cpp +++ b/src/Points.cpp @@ -93,43 +93,67 @@ void Points::renderArrow() const glEnable(GL_BLEND); glTranslatef(-0.5f, 0.11f, 0.0f); - glColor4f(0.1f, 0.1f, 0.8f, 0.6f); + glColor4f(0.2f, 0.1f, 0.9f, 0.7f); + + const float headWidth = 0.25f; if (state == TAKEN) { - //glRotatef(45.0f, 0.0f, 1.0f, 0.0f); - + const BezierCurve& curve = reflected ? myReflectedCurve : myCurve; const float step = 0.1f; + const float arrowLen = 0.7f; - for (float t = 0.0f; t < 1.0f; t += step) { + for (float t = 0.0f; t < arrowLen; t += step) { const Vector v1 = curve(t); const Vector v2 = curve(t + step); glDisable(GL_CULL_FACE); - glBegin(GL_QUADS); - { - glVertex3f(v1.x, 0.0f, v1.y - 0.1f); - glVertex3f(v1.x, 0.0f, v1.y + 0.1f); - glVertex3f(v2.x, 0.0f, v2.y + 0.1f); - glVertex3f(v2.x, 0.0f, v2.y - 0.1f); + if (t >= arrowLen - step) { + // Arrow head + glBegin(GL_TRIANGLES); + { + glVertex3f(v1.x, 0.0f, v1.y - headWidth); + glVertex3f(v2.x, 0.0f, v2.y); + glVertex3f(v1.x, 0.0f, v1.y + headWidth); + } + glEnd(); + } + else { + glBegin(GL_QUADS); + { + glVertex3f(v1.x, 0.0f, v1.y - 0.1f); + glVertex3f(v1.x, 0.0f, v1.y + 0.1f); + glVertex3f(v2.x, 0.0f, v2.y + 0.1f); + glVertex3f(v2.x, 0.0f, v2.y - 0.1f); + } + glEnd(); } - glEnd(); - } } else { + const float headLength = 0.3f; + glBegin(GL_QUADS); { glVertex3f(0.0f, 0.0f, 0.1f); - glVertex3f(3.0f, 0.0f, 0.1f); - glVertex3f(3.0f, 0.0f, -0.1f); + glVertex3f(2.0f - headLength, 0.0f, 0.1f); + glVertex3f(2.0f - headLength, 0.0f, -0.1f); glVertex3f(0.0f, 0.0f, -0.1f); } glEnd(); + + // Draw the arrow head + glBegin(GL_TRIANGLES); + { + glVertex3f(2.0f - headLength, 0.0f, headWidth); + glVertex3f(2.0f, 0.0f, 0.0f); + glVertex3f(2.0f - headLength, 0.0f, -headWidth); + } + glEnd(); } glPopAttrib(); -- 2.39.2