OpenGL:帮助使用gl函数绘制球体/圆

时间:2012-01-05 06:49:11

标签: c++ opengl glut

在我的项目中,我需要绘制一个球体(可能是半球形也可以)。为此,我使用sin()和cos()方法计算(x,y)坐标的角度。但是按照这种方法,我觉得它正在达到我项目的性能。任何人都可以帮我绘制一个简单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();
}

通过上述程序,我得到了球体。但表现很慢。

1 个答案:

答案 0 :(得分: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行的行