Par*_*apa 5 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();
Run Code Online (Sandbox Code Playgroud)
}
编辑球体现在显示出来,但只有在偶数或奇数迭代中不能分辨哪个,但我猜是奇数。
EDIT2无需为奇偶迭代进行不同的迭代,将其删除即可解决问题,现在球体看起来不错。