source: trunk/sys/TinyGL/examples/spin.c @ 397

Last change on this file since 397 was 1, checked in by alain, 8 years ago

First import

File size: 2.7 KB
Line 
1/* spin.c */
2
3
4/*
5 * Spinning box.  This program is in the public domain.
6 *
7 * Brian Paul
8 */
9
10
11#include <math.h>
12#include <stdio.h>
13
14#include <GL/glx.h> 
15#include <GL/gl.h> 
16#include "ui.h"
17
18
19
20
21static GLfloat Xrot, Xstep;
22static GLfloat Yrot, Ystep;
23static GLfloat Zrot, Zstep;
24static GLfloat Step = 5.0;
25static GLfloat Scale = 1.0;
26static GLuint Object;
27
28
29
30
31static GLuint make_object( void )
32{
33   GLuint list;
34
35   list = glGenLists( 1 );
36
37   glNewList( list, GL_COMPILE );
38
39   glBegin( GL_LINE_LOOP );
40   glColor3f( 1.0, 1.0, 1.0 );
41   glVertex3f(  1.0,  0.5, -0.4 );
42   glColor3f( 1.0, 0.0, 0.0 );
43   glVertex3f(  1.0, -0.5, -0.4 );
44   glColor3f( 0.0, 1.0, 0.0 );
45   glVertex3f( -1.0, -0.5, -0.4 );
46   glColor3f( 0.0, 0.0, 1.0 );
47   glVertex3f( -1.0,  0.5, -0.4 );
48   glEnd();
49
50   glColor3f( 1.0, 1.0, 1.0 );
51
52   glBegin( GL_LINE_LOOP );
53   glVertex3f(  1.0,  0.5, 0.4 );
54   glVertex3f(  1.0, -0.5, 0.4 );
55   glVertex3f( -1.0, -0.5, 0.4 );
56   glVertex3f( -1.0,  0.5, 0.4 );
57   glEnd();
58
59   glBegin( GL_LINES );
60   glVertex3f(  1.0,  0.5, -0.4 );   glVertex3f(  1.0,  0.5, 0.4 );
61   glVertex3f(  1.0, -0.5, -0.4 );   glVertex3f(  1.0, -0.5, 0.4 );
62   glVertex3f( -1.0, -0.5, -0.4 );   glVertex3f( -1.0, -0.5, 0.4 );
63   glVertex3f( -1.0,  0.5, -0.4 );   glVertex3f( -1.0,  0.5, 0.4 );
64   glEnd();
65
66
67   glEndList();
68
69   return list;
70}
71
72
73
74void reshape( int width, int height )
75{
76   glViewport(0, 0, (GLint)width, (GLint)height);
77   glMatrixMode(GL_PROJECTION);
78   glLoadIdentity();
79   glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 15.0 );
80   glMatrixMode(GL_MODELVIEW);
81}
82
83
84GLenum key(int k, GLenum mask)
85{
86   switch (k) {
87   case KEY_ESCAPE:
88       exit(0);
89   }
90   return GL_FALSE;
91}
92
93
94void draw( void )
95{
96   glClear( GL_COLOR_BUFFER_BIT );
97
98   glPushMatrix();
99
100   glTranslatef( 0.0, 0.0, -10.0 );
101   glScalef( Scale, Scale, Scale );
102   if (Xstep) {
103      glRotatef( Xrot, 1.0, 0.0, 0.0 );
104   }
105   else if (Ystep) {
106      glRotatef( Yrot, 0.0, 1.0, 0.0 );
107   }
108   else {
109      glRotatef( Zrot, 0.0, 0.0, 1.0 );
110   }
111
112   glCallList( Object );
113
114   glPopMatrix();
115
116   glFlush();
117   tkSwapBuffers();
118}
119
120
121void idle( void )
122{
123   Xrot += Xstep;
124   Yrot += Ystep;
125   Zrot += Zstep;
126
127   if (Xrot>=360.0) {
128      Xrot = Xstep = 0.0;
129      Ystep = Step;
130   }
131   else if (Yrot>=360.0) {
132      Yrot = Ystep = 0.0;
133      Zstep = Step;
134   }
135   else if (Zrot>=360.0) {
136      Zrot = Zstep = 0.0;
137      Xstep = Step;
138   }
139   draw();
140}
141
142void init(void)
143{
144   Object = make_object();
145   glCullFace( GL_BACK );
146/*   glEnable( GL_CULL_FACE );*/
147   glDisable( GL_DITHER );
148   glShadeModel( GL_FLAT );
149/*   glEnable( GL_DEPTH_TEST ); */
150
151   Xrot = Yrot = Zrot = 0.0;
152   Xstep = Step;
153   Ystep = Zstep = 0.0;
154}
155
156
157int main( int argc, char *argv[] )
158{
159    return ui_loop(argc, argv, "spin");
160}
Note: See TracBrowser for help on using the repository browser.