Кривые CGPathRef / Bezier в OpenGL-ES - PullRequest
       41

Кривые CGPathRef / Bezier в OpenGL-ES

0 голосов
/ 20 февраля 2011

Я подумываю о переносе проекта iPhone из основной анимации на OpenGL-ES.

Мне нужно отобразить кнопку, созданную из CGPathRef s.

Но, похоже, у GL нетположение о кривых Безье.

Может ли кто-нибудь предоставить код, который отображает кривую Безье в GL?

1 Ответ

2 голосов
/ 22 февраля 2011

Это позволит принять ряд точек, чтобы нарисовать округлую линию Безье. Он должен использовать точечные спрайты. Если вы отправите ему линию из трех точек и количество точечных спрайтов для рисования, это создаст линию Безье. Код основан на чем-то, что я где-то нашел, но не могу вспомнить, где.

Требуется:

CGPoint origin - Первая точка Управление CGPoint - Mid Point Пункт назначения CGPoint - конечная точка int сегменты - количество отображаемых точек.

Для подсчета количества очков я использую:

count = MAX(ceilf(sqrtf(([[currentStroke objectAtIndex:i+2] CGPointValue].x - [[currentStroke objectAtIndex:i] CGPointValue].x) 
                                    * ([[currentStroke objectAtIndex:i+2] CGPointValue].x - [[currentStroke objectAtIndex:i] CGPointValue].x) 
                                    + ((invertedYThirdCoord - invertedYBegCoord) * (invertedYThirdCoord - invertedYBegCoord))) / 2), 1)*4;

В любом случае, код (на C ++):

CGPoint vertices[segments];
    CGPoint midPoint;



    float x, y;

        float t = 0.0;
        for(int i = 0; i < (segments); i++)
        {
            x = pow(1 - t, 2) * origin.x + 2.0 * (1 - t) * t * control.x + t * t * destination.x;
            y = pow(1 - t, 2) * origin.y + 2.0 * (1 - t) * t * control.y + t * t * destination.y;
            vertices[i] = CGPointMake(x, y);
            t += 1.0 / (segments);

        }
        midPoint = CGPointMake(x, 288 - y);
        glVertexPointer(2, GL_FLOAT, 0, vertices);
        glDrawArrays(GL_POINTS, 0, segments);

После этого просчитывается как обычно.

...