计算机图形学OpenGL——键盘控制三维汽车

来源:互联网 发布:婴儿面膜淘宝授权书 编辑:程序博客网 时间:2024/06/06 00:46

                           计算机图形学OpenGL

                                                                                                                           — —键盘控制三维汽车

       最终实现效果:

     

   

  

   源代码:

#include "stdafx.h"#include <windows.h>#include <gl/gl.h>#include <gl/glu.h>#include <gl/glut.h>#include <math.h>static GLfloat xRot = 0.0f;static GLfloat yRot = 0.0f;void Display(void){   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    glPushMatrix();   glRotatef(xRot, 1.0f, 0.0f, 0.0f);  //绕x轴旋转glRotatef(yRot, 0.0f, 1.0f, 0.0f);  //绕y轴旋转//车下半部glBegin(GL_POLYGON);glColor3f(0.1, 0.1, 0.8);glVertex3f(-40.0f,0.0f,15.0f);glVertex3f(40.0f,0.0f,15.0f);glColor3f(1, 0.5, 0.8);glVertex3f(40.0f,-15.0f,15.0f);glVertex3f(-40.0f,-15.0f,15.0f);glEnd();glBegin(GL_POLYGON);glColor3f(0.3, 0.2, 0.5);glVertex3f(40.0f,0.0f,-15.0f);glVertex3f(40.0f,0.0f,15.0f);glVertex3f(40.0f,-15.0f,15.0f);glVertex3f(40.0f,-15.0f,-15.0f);glEnd();glBegin(GL_POLYGON);glColor3f(0.3, 0.1, 0.3);glVertex3f(-40.0f,0.0f,-15.0f);glVertex3f(-40.0f,0.0f,15.0f);glVertex3f(-40.0f,-15.0f,15.0f);glVertex3f(-40.0f,-15.0f,-15.0f);glEnd();    glBegin(GL_POLYGON);glColor3f(0.1, 0.1, 0.8);glVertex3f(-40.0f,0.0f,-15.0f);glVertex3f(40.0f,0.0f,-15.0f);glColor3f(1, 0.5, 0.8);glVertex3f(40.0f,-15.0f,-15.0f);glVertex3f(-40.0f,-15.0f,-15.0f);glEnd();glBegin(GL_POLYGON);glColor3f(0, 0, 1);glVertex3f(-40.0f,0.0f,15.0f);glVertex3f(-40.0f,0.0f,-15.0f);glVertex3f(40.0f,0.0f,-15.0f);glVertex3f(40.0f,0.0f,15.0f);glEnd();glBegin(GL_POLYGON);glColor3f(0.8, 0.5, 0.2);glVertex3f(-40.0f,-15.0f,15.0f);glVertex3f(-40.0f,-15.0f,-15.0f);glVertex3f(40.0f,-15.0f,-15.0f);glVertex3f(40.0f,-15.0f,15.0f);glEnd();//车上半部glBegin(GL_POLYGON);glColor3f(0, 0, 1);glVertex3f(-20.0f,0.0f,15.0f);glVertex3f(-10.0f,10.0f,15.0f);glVertex3f(20.0f,10.0f,15.0f);glVertex3f(25.0f,0.0f,15.0f);glEnd();glBegin(GL_POLYGON);glColor3f(0, 0, 1);glVertex3f(-20.0f,0.0f,-15.0f);glVertex3f(-10.0f,10.0f,-15.0f);glVertex3f(20.0f,10.0f,-15.0f);glVertex3f(25.0f,0.0f,-15.0f);glEnd();glBegin(GL_POLYGON);glColor3f(0, 1, 1);    glVertex3f(-10.0f,10.0f,15.0f);    glVertex3f(-10.0f,10.0f,-15.0f);glVertex3f(20.0f,10.0f,-15.0f);glVertex3f(20.0f,10.0f,15.0f);glEnd();    glBegin(GL_POLYGON);glColor3f(0.5, 0.8, 0.8);    glVertex3f(-10.0f,10.0f,15.0f);glVertex3f(-20.0f,0.0f,15.0f);glVertex3f(-20.0f,0.0f,-15.0f);    glVertex3f(-10.0f,10.0f,-15.0f);glEnd();glBegin(GL_POLYGON);glColor3f(0, 0.5, 0.5);glVertex3f(20.0f,10.0f,15.0f);glVertex3f(20.0f,10.0f,-15.0f);glVertex3f(25.0f,0.0f,-15.0f);glVertex3f(25.0f,0.0f,15.0f);glEnd();glBegin(GL_POLYGON);glColor3f(0, 0, 1);glVertex3f(-30.0f,-15.0f,15.0f);glVertex3f(-30.0f,-15.0f,-15.0f);glVertex3f(30.0f,-15.0f,-15.0f);glVertex3f(30.0f,-15.0f,15.0f);glEnd();//车轮glColor3f(1, 0, 0);glTranslated(-20.0f,-15.0f,15.0f);    glutSolidTorus(2,5,5,100);glTranslated(0.0f,0.0f,-30.0f);    glutSolidTorus(2,5,5,100);glTranslated(45.0f,0.0f,0.0f);    glutSolidTorus(2,5,5,100);glTranslated(0.0f,0.0f,30.0f);    glutSolidTorus(2,5,5,100);    glPopMatrix();glutSwapBuffers();   //交换缓冲}//定义键盘控制函数void SpecialKeys(int key, int x, int y){   if(key == GLUT_KEY_UP)xRot-= 5.0f;   if(key == GLUT_KEY_DOWN)xRot += 5.0f;if(key == GLUT_KEY_LEFT)yRot -= 5.0f;if(key == GLUT_KEY_RIGHT)yRot += 5.0f;glutPostRedisplay(); // 刷新窗口}int main(int argc, char* argv[]){   glutInit(&argc, argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);glutCreateWindow("车");glClearColor(0.0f, 0.0f, 0.0f, 1.0f );glEnable(GL_DEPTH_TEST);glShadeModel(GL_SMOOTH);glMatrixMode(GL_PROJECTION);glLoadIdentity();glOrtho (-100, 100, -100, 100,-100, 100);glutSpecialFunc(SpecialKeys);  //注册功能键回调函数glutDisplayFunc(Display);glutMainLoop();return 0;}

0 0
原创粉丝点击