#include <GLUT/GLUT.h> #include <OpenGL/OpenGL.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> /* ASCII code for the escape key. */ #define ESCAPE 27 /* The number of our GLUT window */ int window; /* A general OpenGL initializtion function. Sets all of teh initial parameters. */ /* We call this right after our OpenGL window is created. */ void initGL(int width, int height) { glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // this will Clear the background color // to black glClearDepth(1.0); // Enables Clearting Of the depth buffer glDepthFunc(GL_LESS); // The type of depth test to do glEnable(GL_DEPTH_TEST); // Enable Depth Testing. glShadeModel(GL_SMOOTH); // Enable smooth color shading glMatrixMode(GL_PROJECTION); glLoadIdentity(); // Reset the projection matrix // @see: http://hi.baidu.com/korndorben/item/76c5020453f18212cc34ea90 gluPerspective(45.0f, (GLfloat)width / (GLfloat)height, 0.1f, 100.0f); // Calcuate the aspect ratio of teh window glMatrixMode(GL_MODELVIEW); } /* The function called when our window is resized (which shouldn't happend, because we're fullscreen) */ void resizeGLScene(int width, int height) { if (height == 0) // Prevent a divide by zero if the window is too small height = 1; glViewport(0, 0, width, height); // Reset the current Viewport and perspective // transformation glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f, (GLfloat)width / (GLfloat)height, 0.1f, 100.0f); glMatrixMode(GL_MODELVIEW); } /* The main drawing function */ void drawGLScene() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear the screen and // the dpeth buffer glLoadIdentity(); // Reset the view glTranslatef(-1.5f, 0.0f, -6.0f); // Move Left 1.5 units And into the screen 6.0 // draw a triangle (in smooth colring mode) glBegin(GL_POLYGON); // start drawing a polygon glColor3f(1.0f, 0.0f, 0.0f); // set the color to red glVertex3f(0.0f, 1.0f, 0.0f); // top glColor3f(0.0f, 1.0f, 0.0f); // Set the Color to green. glVertex3f(1.0f, -1.0f, 0.0f); // bottom right glColor3f(0.0f, 0.0f, 1.0f); // set the color to blue. glVertex3f(-1.0f, -1.0f, 0.0f); // bottom left glEnd(); // We're down with the polygon (smooth color interpolation); glTranslatef(3.0f, 0.0f, 0.0f); // draw a square (quadrilateral) glColor3f(0.5f, 0.5f, 1.0f); // set color to a blue shade. glBegin(GL_QUADS); glVertex3f(-1.0f, 1.0f, 0.0f); // Top left glVertex3f( 1.0f, 1.0f, 0.0f); // top right glVertex3f( 1.0f, -1.0f, 0.0f); // bottom right glVertex3f(-1.0f, -1.0f, 0.0f); // bottom left glEnd(); // Done with the polygon // we need ot swap the buffer to display our drawing. glutSwapBuffers(); } /* The function called whenever a key is pressed. */ void keyPressed(unsigned char key, int x, int y) { usleep(100); // sleep to avoid thrashing this procedure */ /* If escape is pressd, kill everything. */ if (key == ESCAPE) { /* shut down our window. */ glutDestroyWindow(window); /* exit the program...normal termination. */ exit(0); } } int main(int argc, char **argv) { glutInit(&argc, argv); /* Select type of Display mode: Double buffer RGBA color Alpha components supported Depth buffer */ glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH); /* GET A 640 X 360 window */ glutInitWindowSize(640, 480); /* the window starts at the upper left corner of the screen. */ glutInitWindowPosition(0, 0); /* Open a window */ window = glutCreateWindow("Jeff Molofee's GL Code Tutorial ... NeHe 'oo"); /* Register the function to do all our OpenGL drawing. */ glutDisplayFunc(&drawGLScene); /* Go fullscree. Tis is as soon as possible. */ //glutFullScreen(); /* Even if there are no events, redraw our gl scene. */ glutIdleFunc(&drawGLScene); /* Register the function called when our window is resized. */ glutReshapeFunc(&resizeGLScene); /* Register the function called when the keyboard is pressed. */ glutKeyboardFunc(&keyPressed); /* Initialize our window. */ initGL(640, 480); /* Start event procesing engine */ glutMainLoop(); return 1; }
Mac OS X 运行:
$: clang -o lession lession3.c -Wno-deprecated -framework OpenGL -framework GLUT
$: ./lession
结果:一个三角形。一个正方形。
时间: 2024-11-08 23:55:11