Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 绘制具有GL_点和GL_点的点的平滑结果是否为两像素高的点?_C++_Opengl_Sdl - Fatal编程技术网

C++ 绘制具有GL_点和GL_点的点的平滑结果是否为两像素高的点?

C++ 绘制具有GL_点和GL_点的点的平滑结果是否为两像素高的点?,c++,opengl,sdl,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); g

我有以下资料:

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();
}
我在屏幕上得到两个像素宽,两个像素高的点。通过确保在末尾使用
.5
调用
x1
来解决两个像素宽的像素。强制
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();
if(SDL_Init(SDL_Init_EVERYTHING)<0){
fprintf(stderr,“%s:%d\n SDL\u初始化调用失败。\n”、\u文件\u、\u行\u);
返回false;
}
如果((Surf_Display=SDL_SetVideoMode(WWIDTH,WHEIGHT,32,SDL_hwssurface | SDL_GL_DOUBLEBUFFER | SDL_OPENGL))==NULL){
fprintf(标准文件,“%s:%d\n SDL\u SetVideoMode调用失败。\n”、\u文件、\u行;
返回false;
}
//初始化GL系统
glClearColor(0,0,0,1);
glClearDepth(1.0f);
glViewport(0,0,WWIDTH,WHEIGHT);
glMatrixMode(GL_投影);
glLoadIdentity();
格洛托(0,宽,宽,0,1,-1);
glMatrixMode(GLU模型视图);
glEnable(GL_纹理_2D);
glHint(GL_点_平滑,GL_最好);
glHint(GL_线条光滑,GL_最好);
glHint(GL\u多边形\u平滑,GL\u最佳);
glEnable(GL_POINT_SMOOTH);
glEnable(GL_线_光滑);
glEnable(GL_多边形_光滑);
glLoadIdentity();
确保
glEnable(GL_混合物)已被调用,但也没有帮助


另一个注意事项是调用
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES,2)对像素高度也没有影响

我找到了问题的答案

此代码导致错误:

glHint(GL_POINT_SMOOTH, GL_NICEST);
glHint(GL_LINE_SMOOTH, GL_NICEST);
glHint(GL_POLYGON_SMOOTH, GL_NICEST);
这些不是给glHint的正确标志

这段代码修复了它并消除了OpenGL抛出的枚举错误。我通过调试另一个问题发现了这个问题。我没有检查错误状态,这是对的

glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);

我会尝试在另一台机器上测试,以确保图形的卡和驱动程序不会因为没有平滑点而受到指责。我会尝试一下,看看这是否有帮助。我想这是我缺少的一个明显的设置。运行Catalyst 12.6和11.5都会显示完全相同的问题。请给我们视口初始化代码,您设置glOrtho或glPerspective的部分。此外,您是否应用任何变换、不均匀缩放,或者您正在渲染纹理?请确保使用
glEnable(GL_BLEND)启用了混合功能,否则点和线将不平滑。仍然不知道2像素高的问题是否会随之消失。FWIW,这并没有说明你的任何问题。它说OpenGL的设计有多么糟糕,你必须调用一个单独的函数来确定之前是否出了问题。它还告诉加载函数不接受在编译时会捕获的类型化参数。您不能将错误的类型传递给
glHint()
。这应该是一个致命的编译错误。我在使用OpenGL的时候总是遇到这样的问题,这让我非常恼火。我尝试过这里的建议,但我仍然得到2x2像素。如果我使用像(10.5,10.5)这样的坐标,那么我会得到一个5像素的加号形状。