Up: OpenGL Wagon examples. Next: Moving wagon example.

Still wagon example

wagon.h

 1  #ifndef _WAGON_H_
 2  #define _WAGON_H_
   
 3  void wagonInit();
 4  void wagonDraw(double wheel_theta);
   
 5  #endif /* _WAGON_H_ */

wagon.c

 1  #include <math.h>
 2  #include <GL/glut.h>
 3  #include "wheel.h"
 4  #include "wagon.h"
   
 5  // Initializes data necessary for drawing a wagon.
 6  void wagonInit() {
 7      wheelInit();
 8  }
   
 9  // Draws wagon with wheels' bottom on the x-axis, with front at
10  // origin (0,0) and rear at (1,0). The parameter, expressed in
11  // radians, indicates the rotation of the wheels.
12  void wagonDraw(double wheel_theta) {
13      glBegin(GL_POLYGON);            // Draw wagon bed.
14          glVertex2f(1.0, 0.12);
15          glVertex2f(1.0, 0.3);
16          glVertex2f(0.0, 0.3);
17          glVertex2f(0.0, 0.12);
18      glEnd();
   
19      glBegin(GL_LINES);
20          glVertex2f(0.13, 0.35);     // Draw bench.
21          glVertex2f(0.21, 0.35);
22          glVertex2f(0.20, 0.30);     // Draw bench back.
23          glVertex2f(0.24, 0.50);
24      glEnd();
   
25      glPushMatrix();                 // Draw front wheel.
26      glTranslatef(0.15, 0.1, 0);
27      glScalef(0.1, 0.1, 0.1);
28      glRotatef(wheel_theta * 180 / M_PI, 0.0, 0.0, 1.0);
29      wheelDraw();
30      glPopMatrix();
   
31      glPushMatrix();                 // Draw rear wheel.
32      glTranslatef(0.8, 0.1, 0);
33      glScalef(0.1, 0.1, 0.1);
34      glRotatef(wheel_theta * 180 / M_PI, 0.0, 0.0, 1.0);
35      wheelDraw();
36      glPopMatrix();
37  }

wagon_main.h

 1  #include <GL/glut.h>
 2  #include "wagon.h"
   
 3  // Initializes information for drawing within OpenGL.
 4  void init() {
 5      glClearColor(1.0, 1.0, 1.0, 0.0);   // Set window color to white.
 6      glMatrixMode(GL_PROJECTION);        // Set projection parameters.
 7      gluOrtho2D(-.25, 1.25, -.25, 0.75); // Set viewable coordinates.
 8      wagonInit();
 9  }
   
10  // Draws the image.
11  void draw() {
12      glClear(GL_COLOR_BUFFER_BIT);       // Clear display window.
   
13      glColor3f(0.0, 0.0, 0.0);           // Set drawing color to black.
14      wagonDraw(0.0);
   
15      glFlush();  // Process all OpenGL routines as quickly as possible.
16  }
   
17  int main(int argc, char **argv) {
18      glutInit(&argc, argv);
19      glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
20      glutInitWindowPosition(50, 100);    // Set up display window.
21      glutInitWindowSize(300, 200);
22      glutCreateWindow("Still Wagon");
   
23      init();
24      glutDisplayFunc(draw);
25      glutMainLoop();
26      return 0;
27  }
   
28  // To compile: gcc wagon_main.c wagon.c wheel.c -lglut -lGLU -lGL -lm