Как рисовать 2D неправильные изогнутые формы в OpenGL - PullRequest
3 голосов
/ 03 сентября 2011

Последние 3 часа я пытался понять, как использовать формулу кривой Безье, glMap1f и glEvalCoord1f для создания изогнутой формы. (я в основном хочу создать право Кирби ).

Однако я добился небольшого успеха. Когда я использую glBegin (GL_LINE_STRIP), он отслеживает контур, но есть большой + (как ваши оси x и y). Когда я пытаюсь (GL_POLYGON), заливка работает, но у нее есть ромб, соединяющий 4 точки, которые я использую.

1 Ответ

0 голосов
/ 05 сентября 2011

Я узнал, что не так.Оказывается, я неправильно использовал sizeof(array).(конкретно, со ссылкой на приведенный ниже код, вместо использования i < numCurves, я наивно пытался сделать i < sizeof(points))

Следовательно, вместо того, чтобы рисовать 4-5 точек, я закончил тем, что нарисовал 192 кривых, приводяк странным результатам.Алмаз в середине был из-за того, что он не соединялся с начальной точкой.Для справки для будущих людей, которые хотят это сделать, вот код:

Ошибочная картинка: Ошибочная картинка http://img535.imageshack.us/img535/8207/failfd.png

Конечный продукт: Конечный продукт 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();
    }
}
...