OpenGL GL_POLYGON_SMOOTH 2D抗锯齿创建四边形

时间:2012-02-16 15:35:14

标签: c++ c opengl rotation antialiasing

更新:

我在安装NVIDIA控制面板时找到它,如果我卸载它可以正常工作。

在OpenGL中旋转四边形时,边缘变得锯齿状。

如果我调用glEnable(GL_POLYGON_SMOOTH),边缘会变得平滑,但OpenGL会在我的所有图像中绘制一条白色对角线,就像它创建了我的四边形一样。

它的外观如下: GL_POLYGON_SMOOTH

有没有办法禁用该行,还是可以通过另一种简单方式获得抗锯齿? 我试过GL_MULTISAMPLE但没有发生任何事情。

在我的代码中我也有:

glShadeModel(GL_SMOOTH);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glDisable(GL_DEPTH_TEST);

glEnable(GL_BLEND);

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

1 个答案:

答案 0 :(得分:3)

好的,我会把它作为一个答案写下来,让我知道它是否能在试用后发挥作用。

GL_TRIANGLE_FAN:如果应用程序指定顶点序列v,则OpenGL使用v 0,v 1和v 2渲染三角形;使用v 0,v 2和v 3的另一个三角形;使用v 0,v 3和v 4的另一个三角形;等等。如果应用程序指定了n个顶点,则OpenGL将呈现n-2个连接的三角形。

因此要绘制以原点为中心的单位四元组,

glBegin(GL_TRIANGLE_FAN);

glTexCoord2f(0f, 0f);
glVertex3f(-halfWidth, -halfHeight, 0f);

glTexCoord2f(0f, 1f);
glVertex3f(-halfWidth, halfHeight, 0f);

glTexCoord2f(1f, 1f);
glVertex3f(halfWidth, halfHeight, 0f);

glTexCoord2f(1f, 0f);
glVertex3f(halfWidth, -halfHeight, 0f);

glEnd();

现在你可以在你的四边形周围使用相同的变换!希望有所帮助!