1 /*
2 * Draw a triangle with rotation
3 */
4
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include "glut_wrap.h"
8
9
10 static int win;
11 static float rot = 0.0f;
12
13
14 static void
Reshape(int width,int height)15 Reshape(int width, int height)
16 {
17 glViewport(0, 0, width, height);
18
19 glMatrixMode(GL_PROJECTION);
20 glLoadIdentity();
21 glMatrixMode(GL_MODELVIEW);
22 glLoadIdentity();
23 }
24
25
26 static void
Key(unsigned char key,int x,int y)27 Key(unsigned char key, int x, int y)
28 {
29 if (key == 27) {
30 glutDestroyWindow(win);
31 exit(0);
32 }
33 else if (key == 'r') {
34 rot += 5.0f;
35 glutPostRedisplay();
36 }
37 else if (key == 'R') {
38 rot -= 5.0f;
39 glutPostRedisplay();
40 }
41 }
42
43
44 static void
Draw(void)45 Draw(void)
46 {
47 glClear(GL_COLOR_BUFFER_BIT);
48
49 glPushMatrix();
50 glRotatef(rot, 0.0, 0.0, 1.0f);
51
52 glBegin(GL_TRIANGLES);
53 glColor3f(1.0f, 0.0f, 0.0f);
54 glVertex3f(-0.8f, -0.8f, 0.0f);
55 glColor3f(0.0f, 1.0f, 0.0f);
56 glVertex3f(0.8f, -0.8f, 0.0f);
57 glColor3f(0.0f, 0.0f, 1.0f);
58 glVertex3f(0.0f, 0.8f, 0.0f);
59 glEnd();
60
61 glPopMatrix();
62
63 glutSwapBuffers();
64 }
65
66
67 static void
Init(void)68 Init(void)
69 {
70 fprintf(stderr, "GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
71 fprintf(stderr, "GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
72 fprintf(stderr, "GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR));
73 fflush(stderr);
74
75 glClearColor(0.3, 0.3, 0.7, 0.0);
76 }
77
78
79 int
main(int argc,char ** argv)80 main(int argc, char **argv)
81 {
82 glutInit(&argc, argv);
83
84 if (argc > 1) {
85 rot = atof(argv[1]);
86 printf("Using rotation %g\n", rot);
87 fflush(stdout);
88 }
89
90 glutInitWindowPosition(0, 0);
91 glutInitWindowSize(250, 250);
92
93 glutInitDisplayMode(GLUT_RGB | GLUT_ALPHA | GLUT_DOUBLE);
94
95 win = glutCreateWindow(*argv);
96 if (!win) {
97 exit(1);
98 }
99
100 Init();
101
102 glutReshapeFunc(Reshape);
103 glutKeyboardFunc(Key);
104 glutDisplayFunc(Draw);
105 glutMainLoop();
106 return 0;
107 }
108