NeHe OpenGL lession 4

来源:互联网 发布:玩天龙八部网络延迟 编辑:程序博客网 时间:2024/05/01 18:35

// lession4.c#include <OpenGL/OpenGL.h>#include <GLUT/GLUT.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>/* ASCII code for teh escape key. */#define ESCAPE 27/* The number of our GLUT window */int window;/* rotation angle for the triangle. */float rtri = 0.0f;/* rotation angle for the quadrilateral. */float rquad = 0.0f;/* A general OpenGL initialization function. Sets all of the initial parameters. */// We call this right after our OpoenGL window is created.void initGL(int width, int height) { // This will clear The background color to black.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);glClearDepth(1.0); // Enables clearing of the depth bufferglDepthFunc(GL_LESS); // The type of test to do.glEnable(GL_DEPTH_TEST); // Enables depth testing.glShadeModel(GL_SMOOTH);    // Enalbes smooth color shading.glMatrixMode(GL_PROJECTION); glLoadIdentity(); // Reset the projection matrix.// calculate the aspect ratio of the window.gluPerspective(45.0f, (GLfloat)width / (GLfloat)height, 0.1f, 100.0f);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 transformationglMatrixMode(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 depth bufferglLoadIdentity(); // Reset the view.glTranslatef(-1.5f, 0.0f, -6.0f); // Move left 1.5 units and into the screen 6.0.glRotatef(rtri, 0.0f, 1.0f, 0.0f); // Rotate the triangle on the y axis// Draw a triangel (in smooth coloring mode)glBegin(GL_POLYGON);// Start drawing a polygonglColor3f(1.0f, 0.0f, 0.0f); // set the color to redglVertex3f(0.0f, 1.0f, 0.0f); // topglColor3f(0.0f, 1.0f, 0.0f); // set the color to green.glVertex3f(1.0f, -1.0f, 0.0f); // bottom rightglColor3f(0.0f, 0.0f, 1.0f); // set the color to blue.glVertex3f(-1.0f, -1.0f, 0.0f); // bottom left.glEnd(); // we're done with the polygon (smooth color interpolation)glLoadIdentity(); // make sure we're no longer rotated.glTranslatef(1.5f, 0.0f, -6.0f);   // Move Right 3 Units, and back into the screen 6.0glRotatef(rquad, 1.0f, 0.0f, 0.0f); // Roate the quad on the x axis// Draw a square (quadrilateral)glColor3f(0.5f, 0.5f, 1.0f);// set color to a blue shade.glBegin(GL_QUADS); // Start drawing a polygon (4 sides);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.rtri += 15.0f;// Increase the rotation variable for the trianglerquad -= 15.0f; // decrease the rotation variable for the quad.// swap the buffers to display, since double buffering in used.glutSwapBuffers();}/* The function called whenever a key is pressed. */void keyPressed(unsigned char key, int x, int y) {/* sleep to avoid thrashing this procedure */usleep(100);/* If escape is pressed, 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 480 window */ glutInitWindowSize(640, 480); /* the window starts at teh upper left corner of the screen */ glutInitWindowSize(0, 0); /* Openg a window */ window = glutCreateWindow("Jeff Molofee's GL Code Tutorial ... NeHe '99"); /* Register the function to do all our OpenGL drawing. */ glutDisplayFunc(&drawGLScene); /* Go full screen. This is as soon as possible. */// glutFullScreen(); /* Even if there are not events, redarw our gl scene. */ glutIdleFunc(&drawGLScene); /* register the function called when our window is resized. */ glutReshapeFunc(&resizeGLScene);  /* Register the function claled when teh keyboard is pressed. */ glutKeyboardFunc(&keyPressed); /* Initialize our window. */ initGL(640, 480); /* start event processing engine. */ glutMainLoop(); return 1;}

主要介绍了旋转



塞塞塞

0 0
原创粉丝点击