-5

openglで円弧を描く関数が必要です。使用するためのサンプルコードも必要です。

線で円を描くことができます。線で円弧を描きたいです。これは、円を描くための私の関数です:

void DrawCircle(float cx, float cy, float r, int num_segments) 
{ 
    glBegin(GL_LINE_STRIP); 
    for(int ii = 0; ii < num_segments; ii++) 
    { 
        float theta = 2.0f * 3.1415926f * float(ii) / float(num_segments);//get the current angle 

        float x = r * cosf(theta);//calculate the x component 
        float y = r * sinf(theta);//calculate the y component 

        glVertex2f(x + cx, y + cy);//output vertex 
    } 
    glEnd(); 
}

円弧を描くためのコードをコンサートにLINE_STRIPを使用しましたが、機能しませんでした。誰かが私を助けることができますか?

4

2 に答える 2

2

必ずしも最善の方法ではありませんが、何かを機能させる必要がある場合は、サークルコードを少し変更できます。float arc_length関数のシグネチャにパラメータを追加します。に置き換え2.0f * 3.1415926fますarc_length。特定のオフセットでアークを開始する必要がある場合は、と呼ばれる別のパラメータを追加できますfloat arc_start。次に、ループの各反復でに追加arc_startします。thetafor

Samanのコメントに基づいて編集します。

実際に必要なのは円弧ではなく、曲線のより一般的な表現です。円弧は一種の曲線ですが、非常に特殊な種類です。つまり、一定の半径を持つものです。半径を変えて、任意の曲線を描きたいようです。もしそうなら、私の推奨はベジェ曲線です。これはかなり堅実な紹介です:

http://devmag.org.za/2011/04/05/bzier-curves-a-tutorial/

それらの描画に関するチュートリアルの後半の部分に注意してください。著者は、「最も簡単なアプローチは、tの小さな増分を使用して連続するポイントを計算することです」と述べています。これは、OpenGLでベジェ曲線を描くためにあなたがしなければならないこととほとんど同じです。の値を選択し、元のサークルコードでt行ったのと同じように、forループでインクリメントします。theta反復ごとに、点を描画します。

于 2012-11-12T18:46:10.000 に答える
0

円を描く方法に基づいて、さまざまな解決策があります。現在、あなたがしていることは、セグメントに分割2*pin、それらを一緒に接続することです。さて、頭に浮かぶ最初の解決策は、アークの範囲を変更することです。

たとえば、アークのみを作成するには、3*PI/4単純に変更することができます

float theta = 2.0f * PI * float(ii) / float(num_segments);

float theta = 3.0f * PI / 4.0f * float(ii) / float(num_segments);

または、より一般的には、完全な円が対応し1、何も対応しないと考える場合、円の倍の0円弧を作成できますs(たとえば、3/8)。次に、次のように記述します。

float theta = 2.0f * PI * s * float(ii) / float(num_segments);

円弧を角度0で開始したくない場合があることに注意してください。したがって、この式の開始角度である定数を追加することもできます。

float theta = 2.0f * PI * s * float(ii) / float(num_segments) + start;

別の解決策は、円弧内の角度を計算する代わりに、開始角度と終了角度、およびステップサイズを取得することです。次に、次のようになります。

for (theta = start; theta < end; theta += step)

GL_LINE_STRIPそして、あなたの最後にあなたが弧を正しく終えるために角度にglVertex2f対応thetaするのをすることを確認してください。end


あなたのコメントから他の答えまで、あなたは実際にベジェ曲線スプラインなどの他の曲線を探している可能性があります。

于 2012-11-13T12:39:41.370 に答える