【问题标题】:How to draw 2D irregular curved shapes in OpenGL如何在 OpenGL 中绘制 2D 不规则曲线形状
【发布时间】:2011-11-09 16:24:32
【问题描述】:

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

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

【问题讨论】:

  • 你能发布图片来显示你的问题或描述更多吗?无法弄清楚你试图实现什么以及你得到了什么。链接失效。
  • 与图片的链接已损坏

标签: opengl drawing bezier polygons


【解决方案1】:

我发现了问题所在。原来我错误地使用了sizeof(array)。 (具体参考下面的代码,我没有使用i < numCurves,而是天真地尝试做i < sizeof(points)

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

错误图片:
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();
    }
}

【讨论】:

    猜你喜欢
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多