2012-01-05 5 views
0

私のプロジェクトでは球を描く必要があります(半球は大丈夫かもしれません)。この目的のために、sin()とcos()メソッドを使って(x、y)座標の角度を計算しました。しかし、この方法に従えば、自分のプロジェクトのパフォーマンスに打撃を与えていると感じます。誰でも簡単なgl関数を使って球体を描く手助けができますか?OpenGL:gl関数を使って球/円を描くのに役立つ

Iは、構造定義以下のように:I(x、y)は座標を格納する配列を作成する以下の方法で

typedef struct 
{ 
    float x; 
    float y; 
}Semi_Sphere; 

Semi_Sphere Sky_SemiSphere[180000], Grnd_SemiSphere[180000]; 

を。このメソッドはmain()関数で呼びます。

void createSemi_Sphere_Table (void) 
{ 
float angle_d = 1.1f, angle_r=0.0; 
float const Gl_Pi = 3.14; 
int i = 0; 

while (angle_d < 11.0) 
{ 
    angle_r = Gl_Pi/angle_d; 
    Sky_SemiSphere[i].y = 1.0f + (((3.50)*sin(angle_r))); 
    Sky_SemiSphere[i].x = ((3.7)*cos(angle_r)) - 0.52f; 

    angle_d = angle_d + 0.001; 
    i = i+1; 
} 

} 

次に、以下の方法でこれらの(x、y)座標を使用して球を描画します。 drawScene()メソッドのdrawSemi_Sphere_Grnd()メソッドを呼び出します。

void drawSemi_Sphere_Grnd (void) 
{ 
int L_Index = 0; 

glPushMatrix(); 
for (L_Index = 0; L_Index < 9750; L_Index++) 
{ 
    glBegin(GL_LINES); 
     glVertex2f(Grnd_SemiSphere[L_Index].x, Grnd_SemiSphere[L_Index].y); 
     glVertex2f(-1.0f, -2.1f); 
    glEnd(); 
} 
glPopMatrix(); 
} 

上記の手順では球が得られます。しかし、パフォーマンスは遅いです。

答えて

4

頂点配列の使用からオブジェクトをバッファしてリストを表示するまで、これを高速化するためにできることはたくさんあります。しかし、最も簡単なのはこれです:

glBegin(GL_LINES); 
for (L_Index = 0; L_Index < 9750; L_Index++) 
{ 
    glVertex2f(Grnd_SemiSphere[L_Index].x, Grnd_SemiSphere[L_Index].y); 
    glVertex2f(-1.0f, -2.1f); 
} 
glEnd(); 

はむしろ9750個の別々のGL_LINESプリミティブを発行するよりも、あなたは9750行の長さであるラインのリストを描きます。

+0

お返事ありがとうございます。私は "バッファオブジェクト"に関するいくつかの詳細を教えてくれますか? –

関連する問題