如何在OpenGL中绘制Arc

时间:2010-04-08 01:07:05

标签: c++ opengl

在C ++ OpenGL中制作一个小Pong游戏时,我认为当东西反弹时创建弧形(半圆形)会很有趣。我决定暂时跳过Bezier曲线,然后选择直线代数,但我没有走得太远。我的代数遵循一个简单的二次函数(y = + - sqrt(mx + c))。

这个小小的摘录只是一个我尚未完全参数化的例子,我只想看看它的外观。然而,当我绘制它时,它给出了一条直线垂直线,其中线的切线接近-1.0 / 1.0。

这是GL_LINE_STRIP样式的限制还是有更简单的方法来绘制半圆/弧?还是我完全错过了一些明显的东西?

void Ball::drawBounce()
{   float piecesToDraw = 100.0f;
    float arcWidth = 10.0f;
    float arcAngle = 4.0f;

    glBegin(GL_LINE_STRIP);
        for (float i = 0.0f; i < piecesToDraw; i += 1.0f)  // Positive Half
        {   float currentX = (i / piecesToDraw) * arcWidth;
            glVertex2f(currentX, sqrtf((-currentX * arcAngle)+ arcWidth));
        }
        for (float j = piecesToDraw; j > 0.0f; j -= 1.0f) // Negative half (go backwards in X direction now)
        {   float currentX = (j / piecesToDraw) * arcWidth;
            glVertex2f(currentX, -sqrtf((-currentX * arcAngle) + arcWidth));
        }
    glEnd();
}

提前致谢。

1 个答案:

答案 0 :(得分:2)

sqrtf(( - currentX * arcAngle)+ arcWidth)的目的是什么?当i> 25时,该表达式变为虚构的。正确的方法是使用 sin()/ cos() 生成半圆的X和Y坐标,如问题中所述。如果你想使用抛物线,更干净的方法是计算 y = H-H (x / W)^ 2