void Viewer_2D::draw() { // draw some status text glDisable(GL_LIGHTING); glColor3f(1,0,0); std::ostringstream oss; oss.str(""); oss << "Time-Step: " << time_step_; glText(20, height_-20, oss.str()); // draw play/pause symbol glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); gluOrtho2D(0, width_, 0, height_); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); if (animate_) { glBegin(GL_TRIANGLES); glVertex2i( width_-50, height_-20 ); glVertex2i( width_-50, height_-40 ); glVertex2i( width_-30, height_-30 ); glEnd(); } else { glBegin(GL_QUADS); glVertex2i( width_-50, height_-20 ); glVertex2i( width_-50, height_-40 ); glVertex2i( width_-45, height_-40 ); glVertex2i( width_-45, height_-20 ); glVertex2i( width_-40, height_-20 ); glVertex2i( width_-40, height_-40 ); glVertex2i( width_-35, height_-40 ); glVertex2i( width_-35, height_-20 ); glEnd(); } glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); }
void Mass_spring_viewer::draw() { // parent's status text Viewer_2D::draw(); // draw some status text glDisable(GL_LIGHTING); glColor3f(1,0,0); std::ostringstream oss; oss.str(""); oss << "Integration: "; switch (integration_) { case Euler: oss << "Euler"; break; case Midpoint: oss << "Midpoint"; break; case Verlet: oss << "Verlet"; break; } glText(20, height_-40, oss.str()); oss.str(""); oss << "#Particles: " << body_.particles.size(); glText(20, height_-60, oss.str()); oss.str(""); oss << "#Springs: " << body_.springs.size(); glText(20, height_-80, oss.str()); oss.str(""); oss << "#Triangles: " << body_.triangles.size(); glText(20, height_-100, oss.str()); oss.str(""); oss << "Area Forces: " << (area_forces_ ? "on" : "off"); glText(20, height_-120, oss.str()); oss.str(""); oss << "Collisions: " << (collisions_ == Force_based ? "force" : "impulse"); glText(20, height_-140, oss.str()); oss.str(""); oss << "External force: "; switch (external_force_) { case None: oss << "None"; break; case Center: oss << "Center"; break; case Gravitation: oss << "Gravitation"; break; } glText(20, height_-160, oss.str()); oss.str(""); oss << "Visualize forces: " << (show_forces_ ? "on" : "off"); glText(20, height_-180, oss.str()); // draw walls glDisable(GL_LIGHTING); glLineWidth(1.0); glColor3f(0.5,0.5,0.5); glBegin(GL_LINE_STRIP); glVertex2f( -1.0, 1.0 ); glVertex2f( -1.0, -1.0 ); glVertex2f( 1.0, -1.0 ); glVertex2f( 1.0, 1.0 ); glVertex2f( -1.0, 1.0 ); glEnd(); // draw mouse spring if (mouse_spring_.active) { glDisable(GL_LIGHTING); glLineWidth(5.0); glColor3f(1,0,0); glBegin(GL_LINES); glVertex2fv( body_.particles[mouse_spring_.particle_index].position.data() ); glVertex2fv( mouse_spring_.mouse_position.data() ); glEnd(); } // draw particles, springs, triangles body_.draw(particle_radius_, show_forces_); }