• 抗锯齿说


    抗锯齿处理依赖混合处理,借助混合处理功能。

    #include <GL/glut.h>
    static float rotAngle =0.;
    #include <stdio.h>
    void init(void){
        GLfloat values[2];
        glGetFloatv(GL_LINE_WIDTH_GRANULARITY,values);
        printf("GL_LINE_WIDTH_GRANULARITY value is %3.1f
    ",values[0]);
        glGetFloatv(GL_LINE_WIDTH_RANGE,values);
        printf("GL_LINE_WIDTH_RANGE values are %3.1f   %3.1f
    ",values[0],values[1]);
    
        glEnable(GL_LINE_SMOOTH);
        glEnable(GL_BLEND);
        glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
        glHint(GL_LINE_SMOOTH_HINT,GL_DONT_CARE);
        glLineWidth(1.5);
    
        glClearColor(0.0,0.0,0.0,0.0);
    }
    
    void display(void){
        glClear(GL_COLOR_BUFFER_BIT);
    
        glColor3f(0.0,1.0,0.0);
        glPushMatrix();
            glRotatef(-rotAngle,0.0,0.0,0.1);
            glBegin(GL_LINES);
                glVertex2f(-0.5,-0.5);
                glVertex2f(0.5,0.5);
            glEnd();
        glPopMatrix();
    
        glColor3f(0.0,0.0,1.0);
        glPushMatrix();
            glRotatef(rotAngle,0.0,0.0,0.1);
            glBegin(GL_LINES);
                glVertex2f(-0.5,0.5);
                glVertex2f(0.5,-0.5);
            glEnd();
        glPopMatrix();
    
        glFlush();
    }
    
    void reshape(int w,int h){
        glViewport(0,0,(GLint)w,(GLint)h);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        if(w<=h){
            gluOrtho2D(-1.0,1.0,-1.0*(GLfloat)h/(GLfloat)w,1.0*(GLfloat)h/(GLfloat)w);
        }else{
            gluOrtho2D(-1.0*(GLfloat)w/(GLfloat)h,1.0*(GLfloat)w/(GLfloat)h,-1.0,1.0);
        }
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
    }
    
    void keyboard(unsigned char key,int x,int y)
    {
        switch(key){
        case 'r':
        case 'R':
            rotAngle +=20;
            if(rotAngle >=360.)rotAngle=0.;
            glutPostRedisplay();
            break;
        case 27:
            exit(0);
            break;
        default:
            break;
        }
    }
    int main(int argc,char** argv){
        glutInit(&argc,argv);
        glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
        glutInitWindowSize(200,200);
        glutCreateWindow(argv[0]);
        init();
        glutReshapeFunc(reshape);
        glutKeyboardFunc(keyboard);
        glutDisplayFunc(display);
        glutMainLoop();
        return 0;
    }

    颜色索引模式下的抗锯齿

    #include <GL/glut.h>
    #define RAMPSIZE 16
    #define RAMP1START 32
    #define RAMP2START 48
    
    static float rotAngle =0.;
    void init(void){
        int i;
        for(i=0;i<RAMPSIZE;++i){
            GLfloat shade;
            shade = (GLfloat)i/(GLfloat)RAMPSIZE;
            glutSetColor(RAMP1START+(GLfloat)i,0.,shade,0.);
            glutSetColor(RAMP2START+(GLfloat)i,0.,0.,shade);
        }
        glEnable(GL_LINE_SMOOTH);
        glHint(GL_LINE_SMOOTH_HINT,GL_DONT_CARE);
        glLineWidth(1.5);
    
        glClearIndex((GLfloat)RAMP1START);
        glClearColor(1.0,1.0,1.0,0.5);
    }
    
    void display(void){
        glClear(GL_COLOR_BUFFER_BIT);
    
        glIndexi(RAMP1START);
        glPushMatrix();
        glRotatef(-rotAngle,0.0,0.0,0.1);
        glBegin(GL_LINES);
            glVertex2f(-0.5,-0.5);
            glVertex2f(0.5,0.5);
        glEnd();
        glPopMatrix();
    
        glIndexi(RAMP2START);
        glPushMatrix();
        glRotatef(rotAngle,0.0,0.0,0.1);
        glBegin(GL_LINES);
            glVertex2f(-0.5,0.5);
            glVertex2f(0.5,-0.5);
        glEnd();
        glPopMatrix();
    
        glFlush();
    }
    
    void reshape(int w,int h){
        glViewport(0,0,(GLsizei)w,(GLsizei)h);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        if(w<=h){
            gluOrtho2D(-1.0,1.0,-1.0*(GLfloat)h/(GLfloat)w,1.0*(GLfloat)h/(GLfloat)w);
        }else{
            gluOrtho2D(-1.0*(GLfloat)w/(GLfloat)h,1.0*(GLfloat)w/(GLfloat)h,-1.0,1.0);
        }
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
    }
    
    void keyboard(unsigned char key,int x,int y){
        switch(key){
        case 'r':
        case 'R':
            rotAngle+=20;
            if(rotAngle>=360.)rotAngle=0.;
            glutPostRedisplay();
            break;
        case 27:
            exit(0);
            break;
        default:
            break;
        }
    }
    
    int main(int argc,char ** argv){
        glutInit(&argc,argv);
        glutInitDisplayMode(GLUT_SINGLE|GLUT_INDEX);
        glutInitWindowSize(200,200);
        glutCreateWindow(argv[0]);
        init();
        glutReshapeFunc(reshape);
        glutKeyboardFunc(keyboard);
        glutDisplayFunc(display);
        glutMainLoop();
        return 0;
    }
    生活的残酷,让我们习惯了忘记疲倦,一直奔向远方,追寻着自己的梦想。
  • 相关阅读:
    [HNOI2006]超级英雄
    [CTSC1999]家园
    火星探险问题
    [HNOI2008]GT考试
    [USACO14DEC]后卫马克Guard Mark
    [NOI2018]归程
    [USACO15DEC]最大流Max Flow
    [NOIPlus]斗地主
    [LUOGU] P3128 [USACO15DEC]最大流Max Flow
    [BZOJ] 1878: [SDOI2009]HH的项链
  • 原文地址:https://www.cnblogs.com/L-Arikes/p/5343314.html
Copyright © 2020-2023  润新知