2011-09-03 155 views
3

我已经试过了3个小时来弄清楚如何使用Bezier曲线公式,glMap1f和glEvalCoord1f来创建曲线形状。 (我基本上想创建the right of kirby)。如何在OpenGL中绘制2D不规则曲线形状

但是,我已经取得了一些成功。当我使用glBegin(GL_LINE_STRIP)时,它跟踪轮廓,但有一个很大的+(像你的x和y轴)。当我尝试(GL_POLYGON)时,填充工作,但它有一个钻石连接我使用的4点。

+3

你可以发表图片显示您的问题或描述再来一点 ?无法弄清楚你想达到什么以及你得到什么。链接不起作用。 – neodelphi

+1

与图像链接中断 –

+0

@VJo:图像修复。 – genpfault

回答

0

我发现了什么问题。原来我错误地使用了sizeof(array)。 (比较特别,参照下面的代码,而不是使用i < numCurves,我天真试图做i < sizeof(points)

因此,代替绘图4-5分,我结束了绘制曲线192,导致奇怪的结果。中间的钻石是由于没有连接回到起点。对于谁愿意做这个未来的人参考,下面的代码:

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

最终产品:
Final Product 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(); 
    } 
}