基本涵盖计算机图形学所有知识点的一个场景

#include <GL/glut.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include<windows.h>
//#include <glaux.h>
#include<iostream.h>
//#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
#define PI 3.14159265358979323846f
#define WIDTH 800
#define HEIGHT 600
#define MAX_CHAR 128
static GLfloat angle=0.0f,cangle=0.0f,cangle1=90.0f,pangle=0.0f,pangle1=0.0f,pangle2=0.0f,pangle3=0.0f,pangle4=0.0f,pangle5=0.0f,pangle6=0.0f;
static GLfloat sx=9.5f,sy= 9.5f,sz=5.0f;//太阳坐标
static GLfloat px=-4.0f,py= -3.0f,pz=0.0f;//人坐标
static GLfloat ex=0.0f,ey= 0.0f,ez=-8.0f;//人坐标
static GLfloat cx=0.0f,cy= 0.0f,cz=0.0f;
float theta = PI/2,phi = -PI/2;
static GLfloat xRot = 0.0f;
static GLfloat yRot = 0.0f;
static GLfloat zRot = 0.0f;
GLfloat red,green,blue;
GLint subMenu;
GLenum renderingMode=GL_SMOOTH;
GLuint g_texture = 0;

void init(void)
{
    glClearColor(red,green,blue, 0.0);    
}
void lighting()
{
  // 定义太阳光源,它是一种白色的光源  
     GLfloat sun_light_position[] = { sx,sy,sz,1.0}; //光源的位置
     GLfloat sun_light_ambient[]   = {0.0f, 0.0f, 0.0f, 1.0f};//环境光反射
     GLfloat sun_light_diffuse[]   = {1.0f, 1.0f, 1.0f, 1.0f};//漫反射
     GLfloat sun_light_specular[] = {1.0f, 1.0f, 1.0f, 1.0f};//镜面反射

     glLightfv(GL_LIGHT0, GL_POSITION, sun_light_position);
     glLightfv(GL_LIGHT0, GL_AMBIENT,   sun_light_ambient);
     glLightfv(GL_LIGHT0, GL_DIFFUSE,   sun_light_diffuse);
     glLightfv(GL_LIGHT0, GL_SPECULAR, sun_light_specular);

     glEnable(GL_LIGHT0);//打开光源
     glEnable(GL_LIGHTING);//激活OpenGL光源
     glEnable(GL_DEPTH_TEST);//打开深度测试     
}
void sun()
{
// 定义太阳的材质并绘制太阳

         GLfloat sun_mat_ambient[]   = {0.0f, 0.0f, 0.0f, 1.0f};//环境光反射
         GLfloat sun_mat_diffuse[]   = {0.0f, 0.0f, 0.0f, 1.0f};//漫反射
         GLfloat sun_mat_specular[] = {0.0f, 0.0f, 0.0f, 1.0f}; //镜面反射
         GLfloat sun_mat_emission[] = {1.0f, 1.0f, 0.0f, 1.0f}; //发射光颜色
         GLfloat sun_mat_shininess   = 0.0f;                    //镜面反射指数

         glMaterialfv(GL_FRONT, GL_AMBIENT,    sun_mat_ambient);
         glMaterialfv(GL_FRONT, GL_DIFFUSE,    sun_mat_diffuse);
         glMaterialfv(GL_FRONT, GL_SPECULAR,   sun_mat_specular);
         glMaterialfv(GL_FRONT, GL_EMISSION,   sun_mat_emission);
         glMaterialf (GL_FRONT, GL_SHININESS, sun_mat_shininess);
            
         glTranslatef(sx,sy,sz);    //平移
         glutSolidSphere(2.0, 40, 32);//绘制太阳

}

void table()
{        
         GLfloat mat_ambient[]   = {0.0f, 0.0f, 0.5f, 1.0f};
         GLfloat mat_diffuse[]   = {0.0f, 0.0f, 0.5f, 1.0f};
         GLfloat mat_specular[] = {0.0f, 0.0f, 1.0f, 1.0f};
         GLfloat mat_emission[] = {0.0f, 0.0f, 0.0f, 1.0f};
         GLfloat mat_shininess   = 30.0f;

         glMaterialfv(GL_FRONT, GL_AMBIENT,    mat_ambient);
         glMaterialfv(GL_FRONT, GL_DIFFUSE,    mat_diffuse);
         glMaterialfv(GL_FRONT, GL_SPECULAR,   mat_specular);
         glMaterialfv(GL_FRONT, GL_EMISSION,   mat_emission);
         glMaterialf (GL_FRONT, GL_SHININESS, mat_shininess);
     glPushMatrix();
        glTranslatef(0,-5,2);
          //画出桌面:
         glPushMatrix();       
               glScalef(5,.1,5);
               glutSolidCube(1);
               glColor3f(0.39,0.30,0.1);
               glutWireCube(1);
          glPopMatrix();
            //绘制四个桌腿
            glPushMatrix();
                glPushMatrix();
                   glEnable(GL_COLOR_MATERIAL);
                   glColorMaterial(GL_FRONT,GL_AMBIENT);
                   glColor4f(1.0,0.05,0.0,0.0);
                   glTranslatef(2,-1,-2);
                   glScalef(.1,2,.1);
                    glutSolidCube(1);
                    glDisable(GL_COLOR_MATERIAL);
                glPopMatrix();
 
                glPushMatrix();
                   glEnable(GL_COLOR_MATERIAL);
                   glColorMaterial(GL_FRONT,GL_AMBIENT);
                   glColor4f(1.0,0.05,0.0,0.0);
                   glTranslatef(-2,-1,-2);
                   glScalef(.1,2,.1);
                   glutSolidCube(1);
                   glDisable(GL_COLOR_MATERIAL);
                glPopMatrix();

                glPushMatrix();
                   glEnable(GL_COLOR_MATERIAL);
                   glColorMaterial(GL_FRONT,GL_AMBIENT);
                   glColor4f(1.0,0.05,0.0,0.0);
                   glTranslatef(-2,-1,2);
                   glScalef(.1,2,.1);
                   glutSolidCube(1);
                   glDisable(GL_COLOR_MATERIAL);
                glPopMatrix();

                glPushMatrix();
                   glEnable(GL_COLOR_MATERIAL);
                   glColorMaterial(GL_FRONT,GL_AMBIENT);
                   glColor4f(1.0,0.05,0.0,0.0);
                   glTranslatef(2,-1,2);
                   glScalef(.1,2,.1);
                   glutSolidCube(1);
                   glDisable(GL_COLOR_MATERIAL);
                glPopMatrix();
        glPopMatrix();
    glPopMatrix();
}
void goods()
{
    //桌面上摆放物品,茶壶一只,立方体一个,球一个
        glPushMatrix();
        //茶壶
            GLfloat mat_emission2[] = {0.2f, 0.2f, 0.2f, 1.0f};
            glMaterialfv(GL_FRONT, GL_EMISSION,   mat_emission2);

           glColorMaterial(GL_FRONT,GL_AMBIENT);
           glTranslatef(0,-4.5,2);
           glScalef(.6,1,.6);
           glutSolidTeapot(.6);
           glDisable(GL_COLOR_MATERIAL);
        glPopMatrix();

         glPushMatrix();//立方体
           GLfloat mat_emission3[] = {0.5f, 0.5f, 0.2f, 1.0f};
            glMaterialfv(GL_FRONT, GL_EMISSION,   mat_emission3);
           glColorMaterial(GL_FRONT,GL_AMBIENT);
           glColor4f(1.00,0.91,0.05,0.8);
           glTranslatef(-1.3,-4.5,1.5);
           glScalef(.6,1.0,2);
           glutSolidCube(1);
           glPopMatrix();
            //球
            GLfloat mat_emission4[] = {0.1f, 0.5f, 0.2f, 1.0f};
            glMaterialfv(GL_FRONT, GL_EMISSION,   mat_emission4);
            glTranslatef(.8,-4.7,-0.3);
            glRotatef(90,1,0,0);
            glScalef(.5,.5,.5);
            glutSolidSphere(.5,40,40);
           glDisable(GL_COLOR_MATERIAL);
        glPopMatrix();
}
void car()
{    
        //绘制小车
         GLfloat mat_ambient1[]   = {0.0f, 0.0f, 0.5f, 1.0f};
         GLfloat mat_diffuse1[]   = {0.0f, 0.0f, 0.5f, 1.0f};
         GLfloat mat_specular1[] = {0.0f, 0.0f, 1.0f, 1.0f};
         GLfloat mat_shininess1   = 30.0f;

         glMaterialfv(GL_FRONT, GL_AMBIENT,    mat_ambient1);
         glMaterialfv(GL_FRONT, GL_DIFFUSE,    mat_diffuse1);
         glMaterialfv(GL_FRONT, GL_SPECULAR,   mat_specular1);
         glMaterialf (GL_FRONT, GL_SHININESS, mat_shininess1);
    //车上部
    glPushMatrix();
        glTranslatef(3+cx,-3+cy,2+cz);
        glRotatef(cangle1,0,1,0);
        glScalef(.5,.5,.5);
        glPushMatrix();
                glTranslatef(-1,0,-1);
            glPushMatrix();
                GLfloat mat_emission1[] = {1.0f, 0.3f, 0.0f, 1.0f};
                glMaterialfv(GL_FRONT, GL_EMISSION,   mat_emission1);
                glTranslatef(2,-5,2);
                glScalef(2,1,1.5);
                glutSolidCube(1);
            glPopMatrix();
            glPushMatrix();
                GLfloat mat_emission5[] = {1.0f, 0.2f, 0.0f, 1.0f};
                glMaterialfv(GL_FRONT, GL_EMISSION,   mat_emission5);
                glTranslatef(2,-6,2);
            //    glRotatef(angle,0,1,0);
                glScalef(4,1,1.5);
                glutSolidCube(1);
            glPopMatrix();
            glPopMatrix();
    //四个车轮
        
        glPushMatrix();

            GLfloat mat_emission2[] = {0.0f, 0.0f, 0.0f, 1.0f};
            glMaterialfv(GL_FRONT, GL_EMISSION,   mat_emission2);
                glTranslatef(-1,0,-1);
            glPushMatrix();
                glTranslatef(0.8,-6.8,1.6);
                glRotatef(cangle,0,0,1);
                glutSolidTorus(.2,.6,5,100);
            glPopMatrix();
            glPushMatrix();
                glTranslatef(2.8,-6.8,1.6);
                glRotatef(cangle,0,0,1);
                glutSolidTorus(.2,.6,5,100);
            glPopMatrix();
            glPushMatrix();
                glTranslatef(0.8,-6.8,2.4);
                glRotatef(cangle,0,0,1);
                glutSolidTorus(.2,.6,5,100);
            glPopMatrix();
            glPushMatrix();
                glTranslatef(2.8,-6.8,2.4);
                glRotatef(cangle,0,0,1);
                glutSolidTorus(.2,.6,5,100);
            glPopMatrix();
        glPopMatrix();    
    glPopMatrix();
    }

void people()
{    
    glPushMatrix();
         GLfloat mat_ambient1[]   = {0.0f, 0.0f, 0.5f, 1.0f};
         GLfloat mat_diffuse1[]   = {0.0f, 0.0f, 0.5f, 1.0f};
         GLfloat mat_specular1[] = {0.0f, 0.0f, 1.0f, 1.0f};
         GLfloat mat_shininess1   = 30.0f;

         glMaterialfv(GL_FRONT, GL_AMBIENT,    mat_ambient1);
         glMaterialfv(GL_FRONT, GL_DIFFUSE,    mat_diffuse1);
         glMaterialfv(GL_FRONT, GL_SPECULAR,   mat_specular1);
         glMaterialf (GL_FRONT, GL_SHININESS, mat_shininess1);

         GLfloat mat_emission1[] = {1.0, 0.9f, 0.2f, 1.0f};
         GLfloat mat_emission2[] = {1.0, 1.0f, 0.1f, 1.0f};
         GLfloat mat_emission3[] = {1.0, 0.7f, 0.1f, 1.0f};
         GLfloat mat_emission4[] = {.5, 0.5f, 0.8f, 1.0f};
         GLfloat mat_emission5[] = {0.0, 0.0f, 0.0f, 1.0f};

        glTranslatef(px,py,pz);
        glRotatef(pangle,0.0,1.0,0.0);
        //头
        glPushMatrix();    
            glMaterialfv(GL_FRONT, GL_EMISSION,mat_emission1);
            glTranslatef(0.0,1.5,0.0);
            glScalef(10.0, 10.0, 10.0);
            glutSolidSphere(0.04,40,40);
        glPopMatrix();
        //眼睛
        glPushMatrix();    
            glMaterialfv(GL_FRONT, GL_EMISSION,mat_emission5);
            glTranslatef(0.2,1.6,-0.28);
            glutSolidSphere(0.06,10,10);
        glPopMatrix();
        glPushMatrix();    
            glMaterialfv(GL_FRONT, GL_EMISSION,mat_emission5);
            glTranslatef(-0.2,1.6,-0.28);
            glutSolidSphere(0.06,10,10);    
        glPopMatrix();
        //身体               
        glPushMatrix();
            glMaterialfv(GL_FRONT, GL_EMISSION,mat_emission2);
            glScalef(1.0,2.1,0.5);
            glutSolidCube(1);
        glPopMatrix();
    glPushMatrix();
        glPushMatrix();    
                glTranslatef(0.0,1.0,0.0);
                glRotatef(pangle6,1,0,0);
                glRotatef(-pangle1,1,0,0);
            glPushMatrix();
            //左肢上
                glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission3);
                glTranslatef(0.7,-0.5,0.0);
                glScalef(0.2,1.0,0.25);
                glutSolidCube(1);    
            glPopMatrix();
            //左肢下
            glPushMatrix();    
                glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission4);
                glTranslatef(0.0,-1.0,0.0);
                glRotatef(-pangle2,1,0,0);
                glTranslatef(0.7,0,0.0);
                glRotatef(pangle5,1,0,0);
                glTranslatef(0,-0.3,0.0);
                glScalef(0.2,0.6,0.25);
                glutSolidCube(1);
            glPopMatrix();
        glPopMatrix();
        
        glPushMatrix();
                glTranslatef(0.0,1.0,0.0);
                glRotatef(pangle1,1,0,0);
            //右肢上
            glPushMatrix();
                glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission3);
                glTranslatef(-0.7,-0.5,0.0);
                glScalef(0.2,1.0,0.25);
                glutSolidCube(1);
            glPopMatrix();
            //右肢下
            glPushMatrix();
                glMaterialfv(GL_FRONT, GL_EMISSION,   mat_emission4);
                glTranslatef(0.0,-1.0,0.0);
                glRotatef(pangle2,1,0,0);
                glTranslatef(-0.7,-0.3,0.0);
                glScalef(0.2,0.6,0.25);    
                glutSolidCube(1);
            glPopMatrix();
        glPopMatrix();
    glPopMatrix();
    glPushMatrix();    
        glPushMatrix();
            glTranslatef(0.0,-1.2,0.0);
            glRotatef(pangle3,1,0,0);
            //左腿上
            glPushMatrix();
                glMaterialfv(GL_FRONT, GL_EMISSION,   mat_emission3);
                glTranslatef(0.2,-0.3,0.0);
                glScalef(0.25,1.2,0.25);
                glutSolidCube(1);
            glPopMatrix();
            //左腿下
            glPushMatrix();
                glTranslatef(0.0,-0.9,0.0);
                glMaterialfv(GL_FRONT, GL_EMISSION,   mat_emission4);
                glRotatef(pangle4,1,0,0);
                glTranslatef(0.2,-0.5,0.0);
                glScalef(0.25,1.0,0.25);
                glutSolidCube(1);
            glPopMatrix();
        glPopMatrix();
        glPushMatrix();
        glTranslatef(0.0,-1.0,0.0);
            glRotatef(-pangle3,1,0,0);
            //右腿上
            glPushMatrix();
                glMaterialfv(GL_FRONT, GL_EMISSION,   mat_emission3);
                glTranslatef(-0.2,-0.3,0.0);
                glScalef(0.25,1.2,0.25);
                glutSolidCube(1);
            glPopMatrix();
            //右腿下
            glPushMatrix();
                glMaterialfv(GL_FRONT, GL_EMISSION,   mat_emission4);
                glTranslatef(0.0,-0.9,0.0);
                glRotatef(pangle4,1,0,0);
                glTranslatef(-0.2,-0.5,0.0);
                glScalef(0.25,1.0,0.25);
                glutSolidCube(1);
            glPopMatrix();
        glPopMatrix();
    glPopMatrix();
glPopMatrix();
}
void house()
{
    glPushMatrix();    
        glEnable(GL_TEXTURE_2D);    
        glColor3f(1.0,0.0,5.0);
        glTranslatef(0.0,0.0,12.0);
        glScalef(20,20,1);
        glutWireCube(1.0);
    glPopMatrix();
    glPushMatrix();    
        glColor3f(1.0,0.0,0.0);
        glTranslatef(9,0.0,2);
        glScalef(1,15,15);
        glutWireCube(1.0);
    glPopMatrix();
    glPushMatrix();    
        glColor3f(1.0,0.0,0.0);
        glTranslatef(-9,0.0,2);
        glScalef(1,15,15);
        glutWireCube(1.0);
    glPopMatrix();    
}
void display()
{
      //表示要清除颜色缓冲以及深度缓冲
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     // 创建透视效果视图
     //GL_MODELVIEW 是模型矩阵GL_PROJECTION 是投影矩阵
     glMatrixMode(GL_PROJECTION);
     //glLoadIdentity该函数的功能是重置当前指定的矩阵为单位矩阵
     glLoadIdentity();
     //设置透视投影矩阵
     gluPerspective(90.0f, 1.0f, 1.0f, 20.0f);
     //GL_MODELVIEW,对模型视景矩阵堆栈应用随后的矩阵操作
     glMatrixMode(GL_MODELVIEW);
     glLoadIdentity();
     gluLookAt(ex, ey, ez, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0);

    lighting();
    glPushMatrix();
        sun();
    glPopMatrix();
    glPushMatrix();
        people();
    glPopMatrix();
    glPushMatrix();
        house();
        car();
        table();
        goods();
    glPopMatrix();
    glPushMatrix();
    glPopMatrix();
     glutSwapBuffers();
}

void reshape(GLint w,GLint h)
{
     // 设置视口大小
    glViewport(0, 0, (GLsizei) w, (GLsizei) h);
    // 切换矩阵模式为投影矩阵
    glMatrixMode(GL_PROJECTION);
    // 载入单位矩阵
    glLoadIdentity();
    // 进行二维平行投影
    gluPerspective(65, (GLfloat) w/h, 1.0, 1000);    //设置投影矩阵
    // 切换矩阵模式为模型矩阵
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();                //变为单位矩阵
    // 发送重绘
    glutPostRedisplay();

}
void timefuncupdate(int value)
{
    sx-=0.3f;
     if(sx<-11.0f)    sx=11.0f;
    glutPostRedisplay();
    glutTimerFunc(300,timefuncupdate,0);
}

void keyboard(unsigned char key, int x, int y)
{
    display();
  switch( key )
  {
    case 'a':
        cangle1=0;
        cx+=.1;
        cangle+=10;
        glutPostRedisplay();
        break;
    case 'b':
        cangle1=0;
         cx-=.1;
         cangle-=10;
         glutPostRedisplay();
         break;
    case 'c':
        cangle1=90;
         cz+=.05;
         cangle+=10;
         glutPostRedisplay();
         break;
    case 'd':
         cz-=.05;
         cangle1=90;
         cangle-=10;
         glutPostRedisplay();
         break;
    case 'p':
         pangle+=10;
         glutPostRedisplay();
         break;
    case 'o':
        pz+=0.1;
        px+=pz*tan(pangle);
             pangle1+=5;
        pangle2+=2;
        pangle3+=3;
        pangle4-=0.8;
        if(pangle1>=50)    pangle1=-50;
        if(pangle2>=40)pangle2=0;
        if(pangle3>=30)pangle3=-30;
        if(pangle4<=-16)pangle4=0;
         glutPostRedisplay();
         break;
    case 'l':
        pangle6+=3;
        if(pangle6==30)
             pangle6=-30;        
         pangle5+=5;
         if(pangle5==50)
             pangle5=-50;
         glutPostRedisplay();
         break;
    case 'x':
         ex+=0.03;
         glutPostRedisplay();
         break;
    case 'y':
         ex-=0.03;
         glutPostRedisplay();
         break;
    case 'z':
         ez+=0.03;
         glutPostRedisplay();
         break;
    case 's':
         ex=0.0f;ey= 0.0f;ez=-8.0f;
         glutPostRedisplay();
         break;
    case '1':
        glutFullScreen();
        glutPostRedisplay();
        break;
    case '2':
        glutPositionWindow(100,100);
        glutReshapeWindow(800,600);
        break;
    case 27:                //关闭窗口
            exit(0);
  };
}
void SpecialKeys(int key, int x, int y)
 {
    if(key == GLUT_KEY_UP||key == GLUT_KEY_DOWN||key == GLUT_KEY_LEFT||key == GLUT_KEY_RIGHT)
    {
        pangle1+=1;
        pangle2+=.4;
        pangle3+=.6;
        pangle4-=0.16;
        if(pangle1>=50)    pangle1=-50;
        if(pangle2>=40)pangle2=0;
        if(pangle3>=30)pangle3=-30;
        if(pangle4<=-16)pangle4=0;
    }
    if(key == GLUT_KEY_UP)
    {
        py+= 0.05f;
        pz+= 0.05f;
        pangle=180;
    }
    if(key == GLUT_KEY_DOWN)
    {
        py-= 0.05f;
        pz-= 0.05f;
        pangle=0;
    }
    if(key == GLUT_KEY_LEFT)
    {
        px += 0.05f;
        pangle=-90;
    }
    if(key == GLUT_KEY_RIGHT)
    {    
        px -= 0.05f;
        pangle=90;    
    }
    
 }
//创建主菜单项
void mainMenu(GLint renderingOption)
{
    switch(renderingOption)
    {
        case 1:renderingMode=GL_FLAT;break;
        case 2:renderingMode=GL_SMOOTH;break;
        
    }
    glutPostRedisplay();
}
//创建子菜单项
void SubMenu(GLint option)
{
    switch(option)
    {
    case 1:
        red=0.0;green=0.0;blue=1.0;
        break;
    case 2:
        red=0.0;green=1.0;blue=0.0;
        break;
    case 3:
        red=1.0;green=1.0;blue=1.0;
        break;    
    }
    glClearColor(red,green,blue, 0.0);
    glutPostRedisplay();
}
void output()
{
    cout<<"-----------------------------场景功能快捷键说明-----------------------------"<<endl<<endl;
    cout<<"   我所绘制的场景包括三堵墙,一张桌子及桌上物品,一辆小车,一个人以及随时间运动的光源太阳。"<<endl;
    cout<<"该场景所实现的功能及所用到的快捷键如下如下:"<<endl<<endl;
    cout<<"1、关于小车:"<<endl;
    cout<<"(1)a----小车旋转并向左行驶"<<endl;
    cout<<"(2)b----小车旋转并向右行驶"<<endl;
    cout<<"(3)c----小车向前行驶"<<endl;
    cout<<"(4)d----小车向后行驶"<<endl<<endl;
    cout<<"2、关于小人:"<<endl;
    cout<<"(1)左键----小人旋转并向左走"<<endl;
    cout<<"(2)右键----小人旋转并向右走"<<endl;
    cout<<"(3)上键----小人旋转并向后走"<<endl;
    cout<<"(4)下键----小人旋转并向前走"<<endl;
    cout<<"(5)l----小人左胳膊做前后摇摆运动"<<endl;
    cout<<"(6)p----长按旋转至任意方向"<<endl;
    cout<<"(7)o----沿任意方向行走"<<endl<<endl;
    cout<<"3、关于视角(人眼位置):"<<endl;
    cout<<"(1)x----人眼向左移动,即场景向右旋转"<<endl;
    cout<<"(2)y----人眼向右移动,即场景向左旋转"<<endl;
    cout<<"(3)z----人眼向靠近场景的方向移动,即场景向前移动"<<endl;
    cout<<"(4)s----复原场景至最初界面"<<endl<<endl;
    cout<<"4、关于下拉菜单:"<<endl;
    cout<<"在场景中任意点点击鼠标右键,会弹出下拉菜单,选择颜色的任意一种,即可改变背景颜色。"<<endl<<endl;
    cout<<"5、关于窗口:"<<endl;
    cout<<"(1)1----窗口进入全屏模式"<<endl;
    cout<<"(2)2----窗口复原至初始状态"<<endl;
    cout<<"(3)Esc----关闭窗口"<<endl;
}
void main(int argc,char** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
    glutInitWindowPosition(500,100);
    glutInitWindowSize(WIDTH,HEIGHT);
    glutCreateWindow("计算机图形学");
    init();
    glutKeyboardFunc(keyboard);
    glutSpecialFunc(SpecialKeys);
    glutDisplayFunc(display);
    glutTimerFunc(2,timefuncupdate,0);
    glutReshapeFunc(reshape);
        subMenu = glutCreateMenu(SubMenu);
        glutAddMenuEntry("Blue",1);
        glutAddMenuEntry("Green",2);
        glutAddMenuEntry("White",3);
    glutCreateMenu(mainMenu);
        glutAddMenuEntry("Solid-Color Fill",1);
        glutAddMenuEntry("Color-rpolation Fill",2);
        glutAddSubMenu("Color",subMenu);
    glutAttachMenu(GLUT_RIGHT_BUTTON);
    output();
    glutMainLoop();
}
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值