使用GL_POINTS和GL_POINT_SMOOTH绘制点会产生两个像素高点?

时间:2012-08-06 23:51:12

标签: c++ opengl sdl

我有以下内容:

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();
}

我在屏幕上得到两个像素宽,两个像素高的点。通过确保在末尾使用x1调用.5来解决两个像素宽的像素。强制y1变量以.5结尾修复高度问题。尽管被设置为只有一个点,但这些点总是2像素高。

我怎么解决这个问题?

修改

对相关问题进行了截屏。它正在屏幕上画出正弦波。

Shot0

编辑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);对像素高度也没有影响。

1 个答案:

答案 0 :(得分: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);