/* * Copyright (c) 1996-1999 Silicon Graphics, Inc. All rights reserved. * * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. * * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF THE * POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* transforms.c - draw a triangle under the effect of a rotation, * a translation and a scale * * Escape key - exit program */ #include /* includes gl.h, glu.h */ #include #include "axes.h" /* Function Prototypes */ GLvoid initgfx( GLvoid ); GLvoid keyboard( GLubyte, GLint, GLint ); GLvoid drawScene( GLvoid ); void drawTriangle( GLfloat red, GLfloat green, GLfloat blue ); void printHelp( char * ); /* Global Definitions */ #define KEY_ESC 27 /* ascii value for the escape key */ void main( int argc, char *argv[] ) { GLsizei width, height; glutInit( &argc, argv ); width = glutGet( GLUT_SCREEN_WIDTH ); height = glutGet( GLUT_SCREEN_HEIGHT ); glutInitWindowPosition( 0, height / 4 ); glutInitWindowSize( width / 2, height / 2 ); glutInitDisplayMode( GLUT_RGBA ); glutCreateWindow( argv[0] ); initgfx(); glutKeyboardFunc( keyboard ); glutDisplayFunc( drawScene ); printHelp( argv[0] ); glOrtho( -2.0, 2.0, -2.0, 2.0, -1.0, 1.0 ); glutMainLoop(); } void printHelp( char *progname ) { fprintf(stdout, "\n%s - demonstrates modeling transformations\n\n" "Escape Key - exit the program\n\n", progname); } GLvoid initgfx( GLvoid ) { glClearColor( 0.0, 0.0, 1.0, 1.0 ); glShadeModel( GL_FLAT ); } GLvoid keyboard( GLubyte key, GLint x, GLint y ) { switch (key) { case KEY_ESC: /* Exit whenever the Escape key is pressed */ exit(0); } } GLvoid drawTriangle( GLfloat red, GLfloat green, GLfloat blue ) { glColor3f( red, green, blue ); glBegin( GL_TRIANGLES ); glVertex2f( -0.5f, -0.5f ); glVertex2f( 0.5f, -0.5f ); glVertex2f( 0.0f, 0.5f ); glEnd(); } GLvoid drawScene( GLvoid ) { glClear( GL_COLOR_BUFFER_BIT ); /* draw a black triangle centered at the origin */ drawTriangle( 0.0f, 0.0f, 0.0f ); /* Draw x and y axes to show the origin */ XYaxes(); /* move over a bit and draw another triangle */ glTranslatef( 0.5f, 0.0f, 0.0f ); drawTriangle( 0.3f, 0.3f, 0.3f ); /* move over a bit and draw a rotated triangle */ glTranslatef( 0.5f, 0.0f, 0.0f ); /* Rotate 15 degrees counter-clockwise around the positive Z axis */ glRotatef( -15.0f, 0.0f, 0.0f, 1.0f ); drawTriangle( 0.7f, 0.7f, 0.7f ); /* move over a bit and draw a scaled triangle */ glTranslatef( 0.5f, 0.0f, 0.0f ); /* Scale the triangle by one-half in all dimensions */ glScalef( -0.5f, 0.5f, 0.5f ); drawTriangle( 1.0f, 1.0f, 1.0f ); /* draw green triangle */ XYaxes(); glFlush(); }