如何在OpenGL中绘制2D不规则曲线形状



我已经尝试了过去的3个小时,以找出如何使用贝塞尔曲线公式,glMap1f和glEvalCoord1f来创建一个弯曲的形状。(我基本上想创建kirby的权利)。

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

我知道是怎么回事了。原来我用错了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();
    }
}

最新更新