Как нарисовать дугу в OpenGL - PullRequest
1 голос
/ 08 апреля 2010

Создавая небольшую игру в понг на C ++ OpenGL, я решил, что было бы забавно создавать дуги (полукруги), когда вещи подпрыгивают.Я решил на данный момент пропустить кривые Безье и просто перейти к прямой алгебре, но я не ушел далеко.Моя алгебра следует простой квадратичной функции (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 Ответ

2 голосов
/ 08 апреля 2010

Какова цель sqrtf ((- currentX * arcAngle) + arcWidth) ? Когда я> 25, это выражение становится мнимым. Правильный способ сделать это - использовать sin () / cos () для генерации координат X и Y для полукруга, как указано в вашем вопросе. Если вы хотите использовать вместо этого параболу, более чистый способ - вычислить y = H-H (x / W) ^ 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...