C ++中的OpenGL编程:抗锯齿

时间:2014-10-08 23:33:09

标签: c++ opengl antialiasing

我是OpenGL的新手,我所有的知识都来自互联网上的教程。现在我可以编写由点光源点亮的旋转立方体。我的新目标是实现抗锯齿 - 可能没有任何神奇的技术,如假设的glEnable(Smooth_Lines)功能。我目前使用的方法不起作用。

Example of program output!

我的第一次尝试是尝试glAccum功能并实现抖动消除锯齿 - 我不知道这是不可能在我的Radeon显卡上,或者我写错了。

我的第二次尝试是使用glGenFrameBuffers(和其他家人)。但是现在(经过大约10个小时的研究)我只是没有力气继续下去。你能告诉我应该在哪里实施抗锯齿处理吗?或者我应该使用哪些功能?这是我整个代码的剪切版本:

    class Window;
    static Window* ptr;

    class Window{


    GLuint vbo[4],program;
    GLint att[5],mvp,mvp2;

    void init_res(){

    a0=glutGet(GLUT_ELAPSED_TIME);
    GLfloat cube[]= ... something
    GLfloat colors[]= ... still something
    GLushort elements[]= ... oh you can just guess how it should look :)

//now I am binding buffers and send cube data to shaders

    program=glCreateProgram();

//little more code here

    }
    void Draw(){
// here is subfunction for drawing all cube. 
    }

    void onDisplay(){

//here is main function which is send to glutDisplayFunc

    Draw();

//should I add something here?

    glutSwapBuffers();

    }

    Window(int s_w,int s_h){
    glutInit(&ac, av);
    glutInitDisplayMode(GLUT_RGBA|GLUT_ALPHA|GLUT_DOUBLE|GLUT_DEPTH);
    glutInitWindowSize(s_w, s_h);
    glutCreateWindow("My Rotating Cube");
    glewInit();
    init_res();
    ptr=this;
    glutDisplayFunc(Display);
    glutReshapeFunc(Reshape);
    glutIdleFunc(Idle);
    glutKeyboardFunc(Key);

    glEnable(GL_LINE_SMOOTH_HINT);
    glEnable(GL_POINT_SMOOTH);
    glEnable(GL_POLYGON_SMOOTH);
    glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
    glEnable(GL_BLEND);
    glHint(GL_POLYGON_SMOOTH_HINT,GL_NICEST);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_MULTISAMPLE);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

//here is a lot of garbage - you can call it 'voodoo programming'

    glutMainLoop();
    free_resources();
    }

    };

    int main(int argc, char** argv){
    ac=argc;
    av=argv;
    Window *okno;
    okno = new Window(800,600);
    }

目前,该计划中的所有内容都有效(当然,在削减之前:P)。我没有附加着色器 - 它们尽可能简单(带有光照和添加的立方体边框)。

如何在这里实现抗锯齿的想法?

0 个答案:

没有答案