0

iPhone プロジェクトをコア アニメーションから OpenGL-ES に移植することを検討しています。

CGPathRef から構築されたボタンをレンダリングする必要があります。

しかし、GL には Bezier Curves が用意されていないようです。

GL でベジエ曲線をレンダリングするコードを提供できる人はいますか?

4

1 に答える 1

2

これは、丸みを帯びたベジェ ラインを描画するための一連のポイントを受け入れます。ポイント スプライトを使用する必要があります。3 つの点からなる線と、描画する多数の点スプライトを送ると、ベゼワール線が作成されます。コードはどこかで見つけたものに基づいていますが、場所を思い出せません。

以下が必要です。

CGPoint の起点 - 最初のポイント CGPoint コントロール - 中間点 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);

このレンダリングに続いて、通常どおりにレンダリングします。

于 2011-02-22T05:12:44.750 に答える