我有以下内容:
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像素高。
我怎么解决这个问题?
修改
对相关问题进行了截屏。它正在屏幕上画出正弦波。
编辑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);
对像素高度也没有影响。
答案 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);