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
- NeHe OpenGL lession 4
- NeHe OpenGL lession 1
- NeHe OpenGL lession 2
- neHe OpenGL lession 3
- neHe OpenGL lession 5
- neHe OpenGL lession 6
- (1)opengl-nehe 4种框架
- NeHe OpenGL Tutorial
- openGL学习, NeHe教材.
- Nehe的openGL框架
- Nehe opengl 环境搭建
- NEHE Opengl常见问题总结
- opengl win32 nehe
- NeHe OpenGL教程中文版
- VS2008 配置 opengl nehe
- NeHe OpenGL lesson 7
- Nehe OpenGL lesson 8
- NeHe OpenGL Lesson 9
- CodePen最佳实例分享
- To say that twenty-eight stars
- 检测unicode字符集(中文 日文 等其它)
- WCF Service Application和WCF Service Library的区别
- jsp有哪些内置对象作用分别是什么?
- NeHe OpenGL lession 4
- 设计模式(三)--抽象工厂模式
- sdut 面向对象程序设计上机练习四(变量引用)
- 贡献式编程(一)
- jsp面试题
- 另5个你不知道的HTML5接口API
- [leetcode] Minimum Window Substring
- AFNetworking2.0源码解析<一>
- HTML5 Web Storage 特性