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

标签 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();
}

通过上面的程序我得到了球体。但是性能很慢。

最佳答案

您可以做很多事情来加快速度,从使用顶点数组到缓冲对象再到显示列表。但最简单的是:

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 行长的行列表。

关于c++ - OpenGL:帮助使用 gl 函数绘制球体/圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8738677/

相关文章:

c++ - 派生类是否可以具有不在 C++ 中的基类中的构造函数?

c++ - fstream::open() Unicode 或非 Ascii 字符在 Windows 上不起作用(使用 std::ios::out)

用于游戏开发的 Qt 和 OpenGL

c - OpenGL函数不输出任何错误但不起作用

c++ - 为太空模拟器/游戏旋转 spaceship 模型

opengl - 我怎样才能在OpenGL中进行透视变换?

c++ - 如果文件末尾大括号未闭合,则引发编译错误 (C++)

c++ - 如何使用 CMake 构建和链接外部 CMake 依赖项?

c++ - 像真正的风力涡轮机一样旋转物体

c++ - C++ 中的 glutIdleFunc() 变量值未递增