c++ - OpenGL GL_POLYGON_SMOOTH 二维抗锯齿从四边形创建三边形

标签 c++ c opengl rotation antialiasing

更新:

我在安装 NVIDIA Control Panel 时找到了它,如果我卸载它它会正常工作。

当您在 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);

最佳答案

好的,我会把它写下来作为答案,尝试后告诉我它是否有效。

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

现在您可以围绕它进行与您在四边形周围使用的相同的转换!希望对您有所帮助!

关于c++ - OpenGL GL_POLYGON_SMOOTH 二维抗锯齿从四边形创建三边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9314148/

相关文章:

c++ - 为什么不鼓励使用 LD_PRELOAD?

c - 操纵 x64 展开信息以匹配 assembly Hook

c - 为什么递增指针可以工作,但将其视为数组会失败?第2部分

c - 使用 GCC 链接对象的两种方法?

c++ - OpenGL 加载将最后加载的纹理绑定(bind)到所有 textureID

c++ - 在 C++ 中将大文本文件读取到内存

c++ - 为什么这个按位运算是 "narrowing conversion from ' int' 到 'byte'“? - Arduino

C++扩展类强制某些方法私有(private)

c++ - 现代OpenGL阴影立方体贴图上的指针?

c++ - 无法在 OpenGL 上使用不同的 VAO 渲染不同的网格