• opengl雾开启


    #include <GL/glut.h>
    #include <stdio.h>
    #include <iostream>
    using namespace std;
    static GLint fogMode;
    
    static void init(void){
        GLfloat position [] ={0.5,0.5,3.0,0.0};
        glEnable(GL_DEPTH_TEST);
        glLightfv(GL_LIGHT0,GL_POSITION,position);
        glEnable(GL_LIGHTING);
        glEnable(GL_LIGHT0);
        {
            GLfloat mat [3] ={0.1745,0.01175,0.01175};
            glMaterialfv(GL_FRONT,GL_AMBIENT,mat);
            mat[0]=0.61424;mat[1]=0.04136;mat[2]=0.04136;
            glMaterialfv(GL_FRONT,GL_DIFFUSE,mat);
            mat[0]=0.727811;mat[1]=0.626959;mat[2]=0.626959;
            glMaterialfv(GL_FRONT,GL_SPECULAR,mat);
            glMaterialf(GL_FRONT,GL_SHININESS,0.6*128.0);
        }
    
        glEnable(GL_FOG);
        {
            GLfloat fogColor[4]={0.0,0.8,0.0,1.0};
    
            fogMode=GL_EXP;
            glFogi(GL_FOG_MODE,fogMode);
            glFogfv(GL_FOG_COLOR,fogColor);
            glFogf(GL_FOG_DENSITY,0.35);
            glHint(GL_FOG_HINT,GL_DONT_CARE);
            glFogf(GL_FOG_START,1.0);
            glFogf(GL_FOG_END,5.0);
        }
    
        glClearColor(0.0,0.8,0.0,1.0);
    }
    
    static void renderSphere(GLfloat x,GLfloat y,GLfloat z){
        glPushMatrix();
        glTranslatef(x,y,z);
        glutSolidSphere(0.4,16,16);
        glPopMatrix();
    }
    
    void display(void){
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
        renderSphere(-2.,-0.5,-1.0);
        renderSphere(-1.,-0.5,-2.);
        renderSphere(0.,-0.5,-3.);
        renderSphere(1.,-0.5,-4.);
        renderSphere(2.,-0.5,-5.);
        glFlush();
    }
    
    void reshape(int w,int h){
        glViewport(0,0,(GLfloat)w,(GLfloat)h);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        if(w<=h){
          glOrtho(-2.5,2.5,-2.5*(GLfloat)h/(GLfloat)w,2.5*(GLfloat)h/(GLfloat)w,-10.0,10.0);
        }else{
            glOrtho(-2.5*(GLfloat)w/(GLfloat)h,2.5*(GLfloat)w/(GLfloat)h,-2.5,2.5,-10.0,10.0);
        }
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
    }
    
    void keyboard(unsigned char key,int x,int y){
        switch(key){
        case 'f':
        case 'F':
            if(fogMode == GL_EXP){
                fogMode = GL_EXP2;
                printf("current fog mode is : GL_EXP2");
                cout<<"current fog mode is : GL_EXP2"<<endl;
            }else if(fogMode ==GL_EXP2){
                fogMode = GL_LINEAR;
                printf("current fog mode is : GL_LINEAR");
                cout<<"current fog mode is : GL_LINEAR"<<endl;
            }else if(fogMode ==GL_LINEAR){
                printf("current fog mode is : GL_EXP");
                cout<<"current fog mode is : GL_EXP"<<endl;
                fogMode = GL_EXP;
            }
            glFogi(GL_FOG_MODE,fogMode);
            glutPostRedisplay();
            break;
        case 27:
            exit(0);
            break;
        default:
            break;
        }
    }
    
    int main(int argc,char **argv){
        glutInit(&argc,argv);
        glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH|GLUT_MULTISAMPLE);
        glutInitWindowSize(500,500);
        glutCreateWindow(argv[0]);
    
        init();
        glutReshapeFunc(reshape);
        glutKeyboardFunc(keyboard);
        glutDisplayFunc(display);
        glutMainLoop();
        return 0;
    }
    生活的残酷,让我们习惯了忘记疲倦,一直奔向远方,追寻着自己的梦想。
  • 相关阅读:
    SQL Server 跨服务器 存储过程传字符串数组不同数据库之间复制表的数据
    SQL Server 跨服务器 存储过程不同数据库之间复制表的数据
    SQL Server 跨服务器 存储过程不同数据库之间复制表的数据
    SQL Server跨服务器查询
    抓包自定义过滤器需加%XXXX%,如%third_play%
    svn 清理命令失败
    通过windug判断某个模块导致程序不能退出。
    如果判断不出是不是某个模块出的问题,删除此模块测试。
    读配置前把vector清掉
    DNS服务器的原理
  • 原文地址:https://www.cnblogs.com/L-Arikes/p/5348385.html
Copyright © 2020-2023  润新知