home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / mesa-1.2.8 / windows / demos / spin.c < prev   
C/C++ Source or Header  |  1996-05-27  |  3KB  |  165 lines

  1. /* spin.c */
  2.  
  3.  
  4. /*
  5.  * Spinning Mesa logo.
  6.  */
  7.  
  8.  
  9. #include <math.h>
  10. #include <stdio.h>
  11. #include "tk.h"
  12.  
  13.  
  14.  
  15.  
  16. static GLfloat Xrot, Xstep;
  17. static GLfloat Yrot, Ystep;
  18. static GLfloat Zrot, Zstep;
  19. static GLfloat Step = 5.0;
  20. static GLfloat Scale = 1.0;
  21. static GLuint Logo;
  22.  
  23.  
  24.  
  25.  
  26. static GLuint make_logo( void )
  27. {
  28.    GLuint list;
  29.  
  30.    list = glGenLists( 1 );
  31.  
  32.    glNewList( list, GL_COMPILE );
  33.  
  34.    glBegin( GL_LINE_LOOP );
  35.    glVertex3f(  1.0,  0.5, -0.4 );
  36.    glVertex3f(  1.0, -0.5, -0.4 );
  37.    glVertex3f( -1.0, -0.5, -0.4 );
  38.    glVertex3f( -1.0,  0.5, -0.4 );
  39.    glEnd();
  40.  
  41.    glBegin( GL_LINE_LOOP );
  42.    glVertex3f(  1.0,  0.5, 0.4 );
  43.    glVertex3f(  1.0, -0.5, 0.4 );
  44.    glVertex3f( -1.0, -0.5, 0.4 );
  45.    glVertex3f( -1.0,  0.5, 0.4 );
  46.    glEnd();
  47.  
  48.    glBegin( GL_LINES );
  49.    glVertex3f(  1.0,  0.5, -0.4 );   glVertex3f(  1.0,  0.5, 0.4 );
  50.    glVertex3f(  1.0, -0.5, -0.4 );   glVertex3f(  1.0, -0.5, 0.4 );
  51.    glVertex3f( -1.0, -0.5, -0.4 );   glVertex3f( -1.0, -0.5, 0.4 );
  52.    glVertex3f( -1.0,  0.5, -0.4 );   glVertex3f( -1.0,  0.5, 0.4 );
  53.    glEnd();
  54.  
  55.  
  56.    glEndList();
  57.  
  58.    return list;
  59. }
  60.  
  61.  
  62.  
  63. static void reshape( int width, int height )
  64. {
  65.    glViewport(0, 0, (GLint)width, (GLint)height);
  66.    glMatrixMode(GL_PROJECTION);
  67.    glLoadIdentity();
  68.    glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 15.0 );
  69.    glMatrixMode(GL_MODELVIEW);
  70. }
  71.  
  72.  
  73. static GLenum key(int k, GLenum mask)
  74. {
  75.    switch (k) {
  76.       case TK_ESCAPE:
  77.      tkQuit();
  78.    }
  79.    return GL_FALSE;
  80. }
  81.  
  82.  
  83. static void idle( void )
  84. {
  85.    Xrot += Xstep;
  86.    Yrot += Ystep;
  87.    Zrot += Zstep;
  88.  
  89.    if (Xrot>=360.0) {
  90.       Xrot = Xstep = 0.0;
  91.       Ystep = Step;
  92.    }
  93.    else if (Yrot>=360.0) {
  94.       Yrot = Ystep = 0.0;
  95.       Zstep = Step;
  96.    }
  97.    else if (Zrot>=360.0) {
  98.       Zrot = Zstep = 0.0;
  99.       Xstep = Step;
  100.    }
  101. #ifdef __WIN32__
  102.   InvalidateRect(tkGetHWND(),NULL,0);
  103. #endif
  104.  
  105. }
  106.  
  107.  
  108.  
  109. static void draw( void )
  110. {
  111.    glClear( GL_COLOR_BUFFER_BIT );
  112.  
  113.    glPushMatrix();
  114.  
  115.    glTranslatef( 0.0, 0.0, -10.0 );
  116.    glScalef( Scale, Scale, Scale );
  117.    if (Xstep) {
  118.       glRotatef( Xrot, 1.0, 0.0, 0.0 );
  119.    }
  120.    else if (Ystep) {
  121.       glRotatef( Yrot, 0.0, 1.0, 0.0 );
  122.    }
  123.    else {
  124.       glRotatef( Zrot, 0.0, 0.0, 1.0 );
  125.    }
  126.  
  127.    glCallList( Logo );
  128.  
  129.    glPopMatrix();
  130.  
  131.    glFlush();
  132.    tkSwapBuffers();
  133. }
  134.  
  135.  
  136. main( int argc, char *argv[] )
  137. {
  138.    tkInitPosition(0, 0, 300, 300);
  139.  
  140.    tkInitDisplayMode( TK_DOUBLE | TK_DIRECT | TK_RGB );
  141.  
  142.    if (tkInitWindow("Spin") == GL_FALSE) {
  143.       tkQuit();
  144.    }
  145.  
  146.    Logo = make_logo();
  147.    glCullFace( GL_BACK );
  148. /*   glEnable( GL_CULL_FACE );*/
  149.    glDisable( GL_DITHER );
  150.    glShadeModel( GL_FLAT );
  151.  
  152.    glColor3f( 1.0, 1.0, 1.0 );
  153.  
  154.    Xrot = Yrot = Zrot = 0.0;
  155.    Xstep = Step;
  156.    Ystep = Zstep = 0.0;
  157.  
  158.    tkExposeFunc( reshape );
  159.    tkReshapeFunc( reshape );
  160.    tkKeyDownFunc( key );
  161.    tkIdleFunc( idle );
  162.    tkDisplayFunc( draw );
  163.    tkExec();
  164. }
  165.