试图在OpenGL上制作带有三角形条带的球体

时间:2015-02-27 23:51:38

标签: c++ opengl geometry

我试图用OpenGL的OpenGl原语GL_TRIANGLE_STRIP创建一个球体,但似乎我错过了一些东西。程序从球体的底部开始,然后从那里向上。

divO和divA都是球体垂直和水平分割的细分数。

这是我试过的代码。

void hacerEsfera (float radio, int divO, int divA) {

    float px, py,pz;
    int i,j;
    float incO = 2*M_PI / divO;
    float incA = M_PI /divA;

    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_TRIANGLE_STRIP);
    glColor3i(1,0,0);

    //Depende del polo en el que empezemos
    for (i= 0 ; i<= divO; i++){
        for (j = 0; j<=divA ; j++) {


            if (i % 2 == 0){

            pz = cos (M_PI-(incA*j))*radio;
            py = sin (M_PI-(incA*j))*sin (incO*i)*radio;
            px = sin (M_PI-(incA*j))*cos (incO*i)*radio;

            glVertex3f (px, py, pz);

            pz = cos (M_PI-(incA*j))*radio;
            py = sin (M_PI-(incA*j))*sin (incO*(i+1))*radio;
            px = sin (M_PI-(incA*j))*cos (incO*(i+1))*radio;

            glVertex3f (px, py, pz);
           }

        else {
            pz = cos (incA*j)*radio;
            py = sin (M_PI-(incA*j))*sin (incO*i)*radio;
            px = sin (M_PI-(incA*j))*cos (incO*i)*radio;

            glVertex3f (px, py, pz);

            pz = cos (incA*j)*radio;
            py = sin (incA*j)*sin (incO*(i+1))*radio;
            px = sin (incA*j)*cos (incO*(i+1))*radio;

            glVertex3f (px, py, pz);
               }
    }
}
glEnd();
glFlush();

}

编辑球体现在显示但是只有偶数或奇数迭代都无法判断哪个,但我猜的是几率。

enter image description here

EDIT2 没有必要为奇数和偶数迭代进行不同的迭代去除它解决了问题,现在球体看起来很好。

0 个答案:

没有答案