[Racer-svn] SF.net SVN: racer:[80] trunk/racer_editor/View.cpp
Status: Alpha
Brought to you by:
jlegg
From: <jl...@us...> - 2009-11-14 14:48:04
|
Revision: 80 http://racer.svn.sourceforge.net/racer/?rev=80&view=rev Author: jlegg Date: 2009-11-14 14:47:56 +0000 (Sat, 14 Nov 2009) Log Message: ----------- Show markers displaying up and forward direction of the vertices. Modified Paths: -------------- trunk/racer_editor/View.cpp Modified: trunk/racer_editor/View.cpp =================================================================== --- trunk/racer_editor/View.cpp 2009-11-13 14:19:37 UTC (rev 79) +++ trunk/racer_editor/View.cpp 2009-11-14 14:47:56 UTC (rev 80) @@ -200,13 +200,15 @@ return true; } +inline void glVertex(const btVector3 & position) +{ + glVertex3f(position.x(), position.y(), position.z()); +} + void View::draw_path(const Track::Path & path) { - glColor3f(1.0, 1.0, 1.0); - - + glPointSize(5.0); // draw lines between the vertices. - glColor3ub(255, 255, 255); typedef boost::graph_traits<Track::Path::Graph>::edge_iterator EdgeIterator; //typedef boost::graph_traits<Track::Path::Graph>::vertex_descriptor VertexDescriptor; std::pair<EdgeIterator, EdgeIterator> edge_range; @@ -218,26 +220,25 @@ Track::PathVertex vertex_2 = path.graph[target(*(edge_range.first), path.graph)]; Track::PathEdge edge = path.graph[*(edge_range.first)]; + glColor3ub(191, 191, 191); unsigned int count = edge.get_number_of_repetions(); for (unsigned int i = 0; i < count; i++) { edge.get_graphics_mesh(i)->draw(); } + glColor3ub(255, 255, 255); glBegin(GL_LINE_STRIP); for (float t = 0.0; t <= 1.0; t += 0.015625) { - btVector3 position = edge.get_transform(t).getOrigin(); - glVertex3f(position.x(), position.y(), position.z()); + glVertex(edge.get_transform(t).getOrigin()); } glEnd(); } // draw markers at the vertices. glClear(GL_DEPTH_BUFFER_BIT); - glColor3ub(255, 255, 0); - glPointSize(5.0); - glBegin(GL_POINTS); + btScalar length_scale = 64 / scale; /** @todo use marker size to draw a square around the point regardless * of hardware maximum point size. glPointSize is not guranteed to * support sizes other than 1, which is too small. @@ -245,20 +246,36 @@ //const float marker_size = 3.0; // float offset = scale * marker_size; - typedef boost::graph_traits<Track::Path::Graph>::vertex_iterator VertexIterator; - std::pair<VertexIterator, VertexIterator> vertex_range; - for (vertex_range = boost::vertices(path.graph); - vertex_range.first != vertex_range.second; - vertex_range.first++) - { - Track::PathVertex vertex = path.graph[*(vertex_range.first)]; - btVector3 & position = vertex.position; - float x = position.x(); - float y = position.y(); - float z = position.z(); - glVertex3f(x, y, z); - } + typedef boost::graph_traits<Track::Path::Graph>::vertex_iterator VertexIterator; + std::pair<VertexIterator, VertexIterator> vertex_range; + for (vertex_range = boost::vertices(path.graph); + vertex_range.first != vertex_range.second; + vertex_range.first++) + { + const Track::PathVertex & vertex = path.graph[*(vertex_range.first)]; + btVector3 up = vertex.position + length_scale * vertex.get_up(); + btVector3 forward = vertex.position + length_scale * vertex.get_gradient(); + glBegin(GL_LINES); + // line pointing up + glColor3ub(255, 0, 0); + glVertex(vertex.position); + glVertex(up); + // line pointing forward + glColor3ub(0, 255, 0); + glVertex(vertex.position); + glVertex(forward); + glEnd(); + glBegin(GL_POINTS); + // up marker + glColor3ub(255, 0, 0 ); glVertex(up); + // forward marker + glColor3ub(0, 255, 0 ); glVertex(forward); + // vertex marker + glColor3ub(255, 255, 0 ); glVertex(vertex.position); + glEnd(); + } glEnd(); + glColor3ub(255, 255, 255); } bool View::on_button_press_event(GdkEventButton * event) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |