【问题标题】:How to draw an Arc in OpenGL如何在 OpenGL 中绘制圆弧
【发布时间】:2010-04-08 01:07:04
【问题描述】:

在使用 C++ OpenGL 制作一个小型 Pong 游戏时,我认为在弹跳时创建弧线(半圆)会很有趣。我决定暂时跳过贝塞尔曲线,直接使用直代数,但我并没有走多远。我的代数遵循一个简单的二次函数 (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();
}

提前致谢。

【问题讨论】:

    标签: c++ opengl


    【解决方案1】:

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

    【讨论】:

    • 是的,这就是白痴。不知道为什么我决定使用抛物线而不是回想我的单位圆。我想我对为什么有一条垂直线穿过我的画线感到困惑。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多