2012-01-05 129 views
0

在我的項目中,我有一個繪製球體的要求(可能是半球體將會確定)。爲此,我使用sin()和cos()方法來計算(x,y)座標的角度。但是按照這種方法,我覺得它正在實現我的項目。任何人都可以幫助我繪製一個簡單的gl函數的球體。OpenGL:使用gl函數繪製球體/圓圈的幫助

像下面我所定義的結構:

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

Semi_Sphere Sky_SemiSphere[180000], Grnd_SemiSphere[180000]; 

在下面的方法創建一個數組來存儲的(X,Y)座標。這個方法我在我的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

感謝您的回覆..你可以給我一些關於「緩衝區對象」 – 2012-01-05 08:36:59