【问题标题】:GL_POLYGON not filled properly?GL_POLYGON 未正确填充?
【发布时间】:2009-08-13 03:54:59
【问题描述】:

为什么这些线条会出现在我的形状中?

我正在像这样初始化 OpenGL:

glDisable(GL_TEXTURE_2D);
glDisable(GL_DEPTH_TEST);
glDisable(GL_COLOR_MATERIAL);
glEnable(GL_BLEND);
glEnable(GL_POLYGON_SMOOTH);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glClearColor(0, 0, 0, 0);

然后画出这样的形状:

glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1, 0, 0);
glBegin(GL_POLYGON);
    glVertex2f(-5, -5); // bottom left
    glVertex2f(5, -5); // bottom right...
    glVertex2f(6, 0);
    glVertex2f(5, 5);
    glVertex2f(-5, 5);
glEnd();

不管是顺时针还是逆时针。

【问题讨论】:

    标签: opengl rendering


    【解决方案1】:

    GL_POLYGON_SMOOTH 是一种过时且缓慢的多边形抗锯齿方法。这也会导致您在上面看到的问题。

    使用 Multisample 缓冲区扩展是在现代机器上执行快速抗锯齿的最佳方式。阅读更多here.

    【讨论】:

    • 我花了一段时间才弄清楚如何启用多重采样,但我让它工作了。这很好用:) 谢谢,
    【解决方案2】:

    我认为禁用 GL_POLYGON_SMOOTH 可以解决此问题,但您会失去抗锯齿功能。 FSAA 可以作为替代方案,但速度会较慢。

    编辑:环顾四周,有很多使用 glBlendFunc( GL_SRC_ALPHA_SATURATE, GL_ONE ); 的示例

    【讨论】:

    • 禁用 GL_POLYGON_SMOOTH 确实修复了它。后一种解决方案使它完全消失。没有快乐的中位数吗?
    猜你喜欢
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多