home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1998 #6
/
amigamamagazinepolishissue1998.iso
/
coders
/
mesa-1.2.8
/
windows
/
demos
/
spin.c
< prev
Wrap
C/C++ Source or Header
|
1996-05-27
|
3KB
|
165 lines
/* spin.c */
/*
* Spinning Mesa logo.
*/
#include <math.h>
#include <stdio.h>
#include "tk.h"
static GLfloat Xrot, Xstep;
static GLfloat Yrot, Ystep;
static GLfloat Zrot, Zstep;
static GLfloat Step = 5.0;
static GLfloat Scale = 1.0;
static GLuint Logo;
static GLuint make_logo( void )
{
GLuint list;
list = glGenLists( 1 );
glNewList( list, GL_COMPILE );
glBegin( GL_LINE_LOOP );
glVertex3f( 1.0, 0.5, -0.4 );
glVertex3f( 1.0, -0.5, -0.4 );
glVertex3f( -1.0, -0.5, -0.4 );
glVertex3f( -1.0, 0.5, -0.4 );
glEnd();
glBegin( GL_LINE_LOOP );
glVertex3f( 1.0, 0.5, 0.4 );
glVertex3f( 1.0, -0.5, 0.4 );
glVertex3f( -1.0, -0.5, 0.4 );
glVertex3f( -1.0, 0.5, 0.4 );
glEnd();
glBegin( GL_LINES );
glVertex3f( 1.0, 0.5, -0.4 ); glVertex3f( 1.0, 0.5, 0.4 );
glVertex3f( 1.0, -0.5, -0.4 ); glVertex3f( 1.0, -0.5, 0.4 );
glVertex3f( -1.0, -0.5, -0.4 ); glVertex3f( -1.0, -0.5, 0.4 );
glVertex3f( -1.0, 0.5, -0.4 ); glVertex3f( -1.0, 0.5, 0.4 );
glEnd();
glEndList();
return list;
}
static void reshape( int width, int height )
{
glViewport(0, 0, (GLint)width, (GLint)height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 15.0 );
glMatrixMode(GL_MODELVIEW);
}
static GLenum key(int k, GLenum mask)
{
switch (k) {
case TK_ESCAPE:
tkQuit();
}
return GL_FALSE;
}
static void idle( void )
{
Xrot += Xstep;
Yrot += Ystep;
Zrot += Zstep;
if (Xrot>=360.0) {
Xrot = Xstep = 0.0;
Ystep = Step;
}
else if (Yrot>=360.0) {
Yrot = Ystep = 0.0;
Zstep = Step;
}
else if (Zrot>=360.0) {
Zrot = Zstep = 0.0;
Xstep = Step;
}
#ifdef __WIN32__
InvalidateRect(tkGetHWND(),NULL,0);
#endif
}
static void draw( void )
{
glClear( GL_COLOR_BUFFER_BIT );
glPushMatrix();
glTranslatef( 0.0, 0.0, -10.0 );
glScalef( Scale, Scale, Scale );
if (Xstep) {
glRotatef( Xrot, 1.0, 0.0, 0.0 );
}
else if (Ystep) {
glRotatef( Yrot, 0.0, 1.0, 0.0 );
}
else {
glRotatef( Zrot, 0.0, 0.0, 1.0 );
}
glCallList( Logo );
glPopMatrix();
glFlush();
tkSwapBuffers();
}
main( int argc, char *argv[] )
{
tkInitPosition(0, 0, 300, 300);
tkInitDisplayMode( TK_DOUBLE | TK_DIRECT | TK_RGB );
if (tkInitWindow("Spin") == GL_FALSE) {
tkQuit();
}
Logo = make_logo();
glCullFace( GL_BACK );
/* glEnable( GL_CULL_FACE );*/
glDisable( GL_DITHER );
glShadeModel( GL_FLAT );
glColor3f( 1.0, 1.0, 1.0 );
Xrot = Yrot = Zrot = 0.0;
Xstep = Step;
Ystep = Zstep = 0.0;
tkExposeFunc( reshape );
tkReshapeFunc( reshape );
tkKeyDownFunc( key );
tkIdleFunc( idle );
tkDisplayFunc( draw );
tkExec();
}