3

在过去的 3 个小时里,我一直在尝试弄清楚如何使用贝塞尔曲线公式、glMap1f 和 glEvalCoord1f 来创建弯曲的形状。(我基本上想创造kirby 的权利)。

但是,我取得的成功很少。当我使用 glBegin(GL_LINE_STRIP) 时,它会跟踪轮廓,但有一个大 + (就像你的 x 和 y 轴)。当我尝试(GL_POLYGON)时,填充工作,但它有一个菱形连接我正在使用的 4 个点。

4

1 回答 1

0

我发现出了什么问题。事实证明我使用sizeof(array)不正确。(具体来说,参考下面的代码i < numCurves,我天真地尝试做而不是使用i < sizeof(points)

因此,我最终没有画 4-5 个点,而是画了 192 条曲线,导致了奇怪的结果。中间的菱形是因为没有连接回起点。供以后想要这样做的人参考,这是代码:

错误图片:
错误图片 http://img535.imageshack.us/img535/8207/failfd.png

最终产品:
最终产品 http://img685.imageshack.us/img685/7641/finalsa.png

void drawIrregularPolygon(GLfloat points[][4][3], int numCurves)
// REQUIRES: GLfloat points to be a polygon and center of circle to be current matrix
// EFFECTS:  An irregular shape would be drawn
{
    for (int i = 0; i < numCurves; i++)
    {
        glMap1f( GL_MAP1_VERTEX_3, 0.0f, 1.0f, 3, 4, &points[i][0][0] );
        glBegin(GL_POLYGON);  //replace GL_POLYGON with GL_LINE_STRIP if you need outline
        for (int j = 0; j <= TOTAL_SEGMENTS; j++)
            glEvalCoord1f((GLfloat) j / TOTAL_SEGMENTS);
        glVertex2f(points[0][0][0], points[0][0][1]);
        glEnd();
    }
}
于 2011-09-05T01:35:46.530 回答