我正在绘制一个基本多边形,其中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();
}
答案 0 :(得分:5)
GL_POLYGON
的行为仅针对凸多边形定义。你的多边形是凹的,所以这个函数的行为是未定义的(并且,正如你所观察到的,它并不总是有效)。
您需要将多边形分成一个或多个凸多边形才能使其正常工作。在您的情况下,一种简单的方法是在多边形上横向“切割”:
(50,60) _____(70,60) | / | / (50,40)|__/(60,40) | \ | \ (50,20)|____\(70,20)