OpenGL GL_POLYGON无法正确打印

时间:2013-04-10 20:12:29

标签: c++ visual-c++ opengl

我正在绘制一个基本多边形,其中5个边看起来几乎像C形。

(50,60) _____(70,60)
       |    /
       |   /
       |  /(60,40)
       |  \
       |   \
(50,20)|____\(70,20)

非常简单。

当我使用

wcPt2D verts[5] = {{50,20}, {70,20}, {**60**,40}, {70,60}, {50,60}};

enter image description here

我明白了。预期。但当我把那个中心部分改为

wcPt2D verts[5] = {{50,20}, {70,20}, {**51**,40}, {70,60}, {50,60}};

我得到了

enter image description here

这显然不是左侧的1个单位/图像1左侧的9个单位,并且它明显地将y值降低了大约10个单位。这是为什么?

void polygon (wcPt2D *verts)
{
GLint k;

glBegin(GL_POLYGON);
    for (k = 0; k < 5; k++)
    {
        glVertex2f(verts [k].x,verts [k].y);
    }
glEnd();
}

1 个答案:

答案 0 :(得分:5)

GL_POLYGON的行为仅针对凸多边形定义。你的多边形是凹的,所以这个函数的行为是未定义的(并且,正如你所观察到的,它并不总是有效)。

您需要将多边形分成一个或多个凸多边形才能使其正常工作。在您的情况下,一种简单的方法是在多边形上横向“切割”:

(50,60) _____(70,60)
       |    /
       |   /
(50,40)|__/(60,40)
       |  \
       |   \
(50,20)|____\(70,20)