View difference between Paste ID: LCKmVJ8v and
SHOW:
|
|
- or go back to the newest paste.
| 1 | - | |
| 1 | + | |
| 2 | // This code was created by Jeff Molofee '99 (ported to Linux/GLUT by Richard Campbell '99) | |
| 3 | // | |
| 4 | // If you've found this code useful, please let me know. | |
| 5 | // | |
| 6 | // Visit me at www.demonews.com/hosted/nehe | |
| 7 | // (email Richard Campbell at [email protected]) | |
| 8 | // | |
| 9 | #include <GL/glut.h> // Header File For The GLUT Library | |
| 10 | #include <GL/gl.h> // Header File For The OpenGL32 Library | |
| 11 | #include <GL/glu.h> // Header File For The GLu32 Library | |
| 12 | #include <unistd.h> // Header file for sleeping. | |
| 13 | ||
| 14 | /* ascii code for the escape key */ | |
| 15 | #define ESCAPE 27 | |
| 16 | ||
| 17 | /* The number of our GLUT window */ | |
| 18 | int window; | |
| 19 | ||
| 20 | /* A general OpenGL initialization function. Sets all of the initial parameters. */ | |
| 21 | void InitGL(int Width, int Height) // We call this right after our OpenGL window is created. | |
| 22 | {
| |
| 23 | glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // This Will Clear The Background Color To Black | |
| 24 | glClearDepth(1.0); // Enables Clearing Of The Depth Buffer | |
| 25 | glDepthFunc(GL_LESS); // The Type Of Depth Test To Do | |
| 26 | glEnable(GL_DEPTH_TEST); // Enables Depth Testing | |
| 27 | glShadeModel(GL_SMOOTH); // Enables Smooth Color Shading | |
| 28 | ||
| 29 | glMatrixMode(GL_PROJECTION); | |
| 30 | glLoadIdentity(); // Reset The Projection Matrix | |
| 31 | ||
| 32 | gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f); // Calculate The Aspect Ratio Of The Window | |
| 33 | ||
| 34 | glMatrixMode(GL_MODELVIEW); | |
| 35 | } | |
| 36 | ||
| 37 | /* The function called when our window is resized (which shouldn't happen, because we're fullscreen) */ | |
| 38 | void ReSizeGLScene(int Width, int Height) | |
| 39 | {
| |
| 40 | if (Height==0) // Prevent A Divide By Zero If The Window Is Too Small | |
| 41 | Height=1; | |
| 42 | ||
| 43 | glViewport(0, 0, Width, Height); // Reset The Current Viewport And Perspective Transformation | |
| 44 | ||
| 45 | glMatrixMode(GL_PROJECTION); | |
| 46 | glLoadIdentity(); | |
| 47 | ||
| 48 | gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f); | |
| 49 | glMatrixMode(GL_MODELVIEW); | |
| 50 | } | |
| 51 | ||
| 52 | /* The main drawing function. */ | |
| 53 | void DrawGLScene() | |
| 54 | {
| |
| 55 | glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer | |
| 56 | glLoadIdentity(); // Reset The View | |
| 57 | ||
| 58 | // since this is double buffered, swap the buffers to display what just got drawn. | |
| 59 | glutSwapBuffers(); | |
| 60 | } | |
| 61 | ||
| 62 | /* The function called whenever a key is pressed. */ | |
| 63 | void keyPressed(unsigned char key, int x, int y) | |
| 64 | {
| |
| 65 | /* avoid thrashing this procedure */ | |
| 66 | usleep(100); | |
| 67 | ||
| 68 | /* If escape is pressed, kill everything. */ | |
| 69 | if (key == ESCAPE) | |
| 70 | {
| |
| 71 | /* shut down our window */ | |
| 72 | glutDestroyWindow(window); | |
| 73 | ||
| 74 | /* exit the program...normal termination. */ | |
| 75 | exit(0); | |
| 76 | } | |
| 77 | } | |
| 78 | ||
| 79 | int main(int argc, char **argv) | |
| 80 | {
| |
| 81 | /* Initialize GLUT state - glut will take any command line arguments that pertain to it or | |
| 82 | X Windows - look at its documentation at http://reality.sgi.com/mjk/spec3/spec3.html */ | |
| 83 | glutInit(&argc, argv); | |
| 84 | ||
| 85 | /* Select type of Display mode: | |
| 86 | Double buffer | |
| 87 | RGBA color | |
| 88 | Alpha components supported | |
| 89 | Depth buffer */ | |
| 90 | glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH); | |
| 91 | ||
| 92 | /* get a 640 x 480 window */ | |
| 93 | glutInitWindowSize(640, 480); | |
| 94 | ||
| 95 | /* the window starts at the upper left corner of the screen */ | |
| 96 | glutInitWindowPosition(0, 0); | |
| 97 | ||
| 98 | /* Open a window */ | |
| 99 | window = glutCreateWindow("Jeff Molofee's GL Code Tutorial ... NeHe '99");
| |
| 100 | ||
| 101 | /* Register the function to do all our OpenGL drawing. */ | |
| 102 | glutDisplayFunc(&DrawGLScene); | |
| 103 | ||
| 104 | /* Go fullscreen. This is as soon as possible. */ | |
| 105 | glutFullScreen(); | |
| 106 | ||
| 107 | /* Even if there are no events, redraw our gl scene. */ | |
| 108 | glutIdleFunc(&DrawGLScene); | |
| 109 | ||
| 110 | /* Register the function called when our window is resized. */ | |
| 111 | glutReshapeFunc(&ReSizeGLScene); | |
| 112 | ||
| 113 | /* Register the function called when the keyboard is pressed. */ | |
| 114 | glutKeyboardFunc(&keyPressed); | |
| 115 | ||
| 116 | /* Initialize our window. */ | |
| 117 | InitGL(640, 480); | |
| 118 | ||
| 119 | /* Start Event Processing Engine */ | |
| 120 | glutMainLoop(); | |
| 121 | ||
| 122 | return 1; | |
| 123 | } |