6

私はfreeglutを使用しています。FSAA を機能させようとしていますが、何も機能していないようです。サンプル バッファは 1 で、サンプルは 4 です。しかし、アンチエイリアシングは見られません。何か不足していますか?現在、Ubuntu 12.04 を実行しています。それが何かを変えるかどうかはわかりません。

#include <GL/glut.h>
#include <GL/glext.h>
#include <stdio.h>


void render(void);

int main(int argc, char **argv){    
    glutInit(&argc,argv);

    //Initialize the window
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_MULTISAMPLE);
    glutInitWindowPosition(100,100);
    glutInitWindowSize(200,200);
    glutCreateWindow("Testing");
    glutDisplayFunc(render);

    //Enable FSAA       
    glEnable(GL_MULTISAMPLE);

    //2D graphics
    glDisable(GL_DEPTH_TEST);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT), 0, 0, 1);
    glMatrixMode(GL_MODELVIEW);


    GLint buf, sbuf;
    glGetIntegerv(GL_SAMPLE_BUFFERS, &buf);
    printf("number of sample buffers is %d\n", buf);
    glGetIntegerv(GL_SAMPLES, &sbuf);
    printf("number of samples is %d\n", sbuf);

    glutMainLoop();
    return 0;
}

//Draw some stuff
void render(void){  
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glClearColor(1.0f, 1.0f, 1.0f, 1.0f);

    glColor3f(0.0f,1.0f,0.0f);
    glBegin(GL_LINE_LOOP);
        glVertex2f(10.0,10.0);
        glVertex2f(170.0,60.0);
        glVertex2f(50.0,130.0);
        glVertex2f(50.0,60.0);
    glEnd();    

    glutSwapBuffers();
}

私は SDL と GLFW についてよく知っています。ただし、freeglutで動作させたいと思います。

詳細:
グラフィック カード:ATI Radeon HD 4250
OpenGL バージョン: 3.3.11627 互換性プロファイル コンテキスト

4

3 に答える 3

0

あなたのコードは私のコンピューター (Windows を実行している) で正しく動作しました。通常の GLUT だけでなく、freeglut を使用していることを確認してください。したがって、適切なライブラリ ファイル (Windows の freeglut.lib/freeglut.dll など) にリンクする必要があります。さらに、目的のヘッダー ファイルを実際にインクルードしていることを確認するために、glut.h の代わりに freeglut.h をインクルードすることも悪い考えではありません。

glClearColorまた、すべてのフレームを呼び出す必要はありません。クリアカラーを変更したいときだけ呼び出す必要があります。glColorただし、 のように、glClearColorその後に発生する関数呼び出しにのみ適用されることを覚えておいてください。

于 2012-06-05T19:47:12.360 に答える
0

2D でポイントとラインをアンチエイリアスするには、次のようにすることもできます。

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glEnable(GL_LINE_SMOOTH);
glHint(GL_LINE_SMOOTH, GL_NICEST);

glEnable(GL_POINT_SMOOTH);
glHint(GL_POINT_SMOOTH, GL_NICEST);
于 2012-06-02T20:03:04.153 に答える