2

私は次のものを持っています:

glHint(GL_POINT_SMOOTH, GL_NICEST);
glEnable(GL_POINT_SMOOTH);

問題は、ピクセルを描画しようとしたときです。

DrawPoints(float x1,float y1)
{
    glBlendFunc(GL_DST_ALPHA,GL_ONE_MINUS_DST_ALPHA);
    glPointSize(1);
    glBegin(GL_POINTS);
        glVertex2f(x1, y1);
    glEnd();
}

画面上に幅 2 ピクセル、高さ 2 ピクセルの点が表示されます。2 ピクセル幅のピクセルは、最後x1に a を付けて呼び出されるようにすることで解決され.5ました。y1変数の末尾を強制しても、高さの問題は解決.5しませんでした。ポイントは、1 つだけに設定されているにもかかわらず、常に 2 ピクセルの高さです。

どうすればこれを解決できますか?

編集:

問題のスクリーンショットを撮りました。画面に正弦波を描いています。

ショット0

編集2:

完全な初期化コードは次のとおりです。

if(SDL_Init(SDL_INIT_EVERYTHING) < 0) {
    fprintf(stderr,"%s:%d\n    SDL_Init call failed.\n",__FILE__,__LINE__);
    return false;
}

if((Surf_Display = SDL_SetVideoMode(WWIDTH, WHEIGHT, 32, SDL_HWSURFACE | SDL_GL_DOUBLEBUFFER | SDL_OPENGL)) == NULL) {
    fprintf(stderr,"%s:%d\n    SDL_SetVideoMode call failed.\n",__FILE__,__LINE__);
    return false;
}
// Init GL system
glClearColor(0, 0, 0, 1);

glClearDepth(1.0f);

glViewport(0, 0, WWIDTH, WHEIGHT);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glOrtho(0, WWIDTH, WHEIGHT, 0, 1, -1);

glMatrixMode(GL_MODELVIEW);

glEnable(GL_TEXTURE_2D);

glHint(GL_POINT_SMOOTH, GL_NICEST);
glHint(GL_LINE_SMOOTH, GL_NICEST);
glHint(GL_POLYGON_SMOOTH, GL_NICEST);

glEnable(GL_POINT_SMOOTH);
glEnable(GL_LINE_SMOOTH);
glEnable(GL_POLYGON_SMOOTH);

glLoadIdentity();

が呼び出されたことを確認しglEnable(GL_BLEND);ても役に立ちませんでした。

別の注意として、呼び出しSDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 2);はピクセルの高さにも影響しませんでした。

4

1 に答える 1

2

何がうまくいかなかったのかに対する答えを見つけました。

このコードはエラーを引き起こしました:

glHint(GL_POINT_SMOOTH, GL_NICEST);
glHint(GL_LINE_SMOOTH, GL_NICEST);
glHint(GL_POLYGON_SMOOTH, GL_NICEST);

これらは、glHint に与える正しいフラグではありません。

このコードはそれを修正し、OpenGL がスローしていた ENUM エラーを取り除きました。他の問題全体をデバッグすることで、それを見つけました。エラー状態をチェックしないのは当然のことです!

glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);
于 2012-08-12T19:18:48.523 に答える