gpt4 book ai didi

c++ - 使用 GL_POINTS 和 GL_POINT_SMOOTH 绘制点会得到两个像素高的点?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:54:35 25 4
gpt4 key购买 nike

我有以下内容:

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

最佳答案

我找到了问题的答案。

此代码导致错误:

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

关于c++ - 使用 GL_POINTS 和 GL_POINT_SMOOTH 绘制点会得到两个像素高的点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11837506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com