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

3
我已经尝试了三个小时来搞清楚如何使用Bezier曲线公式、glMap1f和glEvalCoord1f创建一个曲线形状(我基本上想要创建Kirby的右边)。然而,我的进展很少。当我使用glBegin(GL_LINE_STRIP)时,它会跟踪轮廓,但有一个大加号(就像你的x和y轴)。当我尝试使用(GL_POLYGON)时,填充效果很好,但是它连接了4个点并形成了一个菱形。

3
您能否发布展示您遇到问题的图片或更详细地描述一下?我无法理解您试图达成什么以及您得到了什么结果。链接无效。 - neodelphi
1
该带有图像的链接已经损坏。 - BЈовић
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();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接