From d5c93f956ecfa3a4b4811190f7106540a41fa8f7 Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Sun, 10 Apr 2011 20:41:52 +0100 Subject: [PATCH] Some tweaks to GenTrack curve function --- include/BezierCurve.hpp | 4 ++-- src/GenTrack.cpp | 22 ++++++++++++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/include/BezierCurve.hpp b/include/BezierCurve.hpp index ea4e29d..9025fc1 100644 --- a/include/BezierCurve.hpp +++ b/include/BezierCurve.hpp @@ -25,7 +25,7 @@ template struct BezierCurve { Vector p[4]; - T length; // A very rough approximation to the length + T length; // Approximate BezierCurve(Vector p1, Vector p2, Vector p3, Vector p4) { @@ -82,7 +82,7 @@ struct BezierCurve { } // A slower approximation to the curve function that guarantees - // uniform(k).length() = curve_length * k + // a linear relationship between s and the arc length Vector uniform(T s, T *out = NULL) const { Vector cur = operator()(0.0), prev; diff --git a/src/GenTrack.cpp b/src/GenTrack.cpp index 06acc34..174202b 100644 --- a/src/GenTrack.cpp +++ b/src/GenTrack.cpp @@ -111,8 +111,8 @@ GenTrack::GenTrack(Vector delta, const float exit_extend = extend_from_center(exit_dir); Vector p1 = entry_dir_norm * -entry_extend; - Vector p2 = entry_dir_norm * pinch_length; - Vector p3 = delta_f - (exit_dir_norm * pinch_length); + Vector p2 = entry_dir_norm * (pinch_length - entry_extend); + Vector p3 = delta_f - (exit_dir_norm * (pinch_length - exit_extend)); Vector p4 = delta_f + (exit_dir_norm * exit_extend); curve = make_bezier_curve(p1, p2, p3, p4); @@ -195,6 +195,24 @@ void GenTrack::render() const glPopMatrix(); #endif + +#if 1 + // Draw control points + glPushMatrix(); + glPushAttrib(GL_LINE_BIT); + + glTranslatef(origin.x, 0.0f, origin.y); + glColor3f(0.8f, 0.1f, 0.1f); + glLineWidth(4.0f); + + glBegin(GL_LINES); + for (int i = 0; i < 4; i++) + gl::vertex(curve.p[i] + make_vector(0.0f, 0.2f, 0.0f)); + glEnd(); + + glPopAttrib(); + glPopMatrix(); +#endif } void GenTrack::set_origin(int x, int y, float h) -- 2.39.2