2

我正在绘制一个基本的多边形,它有 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}};

在此处输入图像描述

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

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

我明白了

在此处输入图像描述

这显然不是左墙 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();
}
4

1 回答 1

5

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

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

(50,60) _____(70,60)
       | /
       | /
(50,40)|__/(60,40)
       | \
       | \
(50,20)|____\(70,20)
于 2013-04-10T20:19:17.867 回答