zoukankan      html  css  js  c++  java
  • 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;
    }
    生活的残酷,让我们习惯了忘记疲倦,一直奔向远方,追寻着自己的梦想。
  • 相关阅读:
    Vue实战笔记
    项目随笔
    Vuex数据可视化
    Vue项目中,要保证某个部分的高度,应该怎么设置
    (转)http authorization 基本认证
    多页应用和单页应用
    Vue项目中使用webpack配置了别名,引入的时候报错
    [转载]解决在win10中webstrom无法使用命令行(Terminal)
    (转)巧用可视区域
    前端管理后台集成解决方案---vue-element-admin
  • 原文地址:https://www.cnblogs.com/L-Arikes/p/5348385.html
Copyright © 2011-2022 走看看