使用glVertex3f的OpenGL绘制球体

时间:2014-02-27 02:57:53

标签: qt opengl geometry trigonometry

我需要在不使用gluSphere()函数的情况下在OpenGL上绘制球体。我找到了这个功能:

    void drawSphere(double r, int lats, int longs) {
    int i, j;
    for(i = 0; i <= lats; i++) {
        double lat0 = M_PI * (-0.5 + (double) (i - 1) / lats);
       double z0  = sin(lat0);
       double zr0 =  cos(lat0);

       double lat1 = M_PI * (-0.5 + (double) i / lats);
       double z1 = sin(lat1);
       double zr1 = cos(lat1);

       glBegin(GL_QUAD_STRIP);
       for(j = 0; j <= longs; j++) {
           double lng = 2 * M_PI * (double) (j - 1) / longs;
           double x = cos(lng);
           double y = sin(lng);

           glNormal3f(x * zr0, y * zr0, z0);
           glVertex3f(x * zr0, y * zr0, z0);
           glNormal3f(x * zr1, y * zr1, z1);
           glVertex3f(x * zr1, y * zr1, z1);
       }
       glEnd();
   }
 }

但我无法理解它的作用。我认为它绘制了看起来像球体的多面体。 另外,我认为lat0,lat1用于确定Z轴顶点的位置。

0 个答案:

没有答案