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

时间:2011-09-03 10:01:59

标签: opengl drawing bezier polygons

我已经尝试了过去3个小时来弄清楚如何使用贝塞尔曲线公式,glMap1f和glEvalCoord1f来创建一个弯曲的形状。 (我基本上想要创建the right of kirby)。

但是,我收效甚微。当我使用glBegin(GL_LINE_STRIP)时,它会跟踪轮廓,但是有一个大的+(比如你的x和y轴)。当我尝试(GL_POLYGON)时,填充起作用,但它有一个钻石连接了我正在使用的4个点。

1 个答案:

答案 0 :(得分: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();
    }
}