绘制球体时缺少三角形

Missing triangles when drawing a sphere

本文关键字:三角形 绘制      更新时间:2023-10-16

我正试图用openGL绘制一个球体,但我找不到我的错误。。。

只有一半的三角形被画出来了,就像图中一样。

这是我迄今为止的算法:

// The angle step used in iteration
float a = (2.0f*M_PI)/8.0;
float c = 0.0f;
for (float theta = 0.0f; theta < 2.0f*M_PI; theta += a, c += a/2.0f)
for (float phi = 0.0f; phi < 2.0f*M_PI; phi += a) {
    // Here something is missing...
    glBegin(GL_TRIANGLES);
    float p_1[3] = {sin(theta)*cos(phi+c), 
    sin(theta)*sin(phi+c), 
    cos(theta)};
    glVertex3f(p_1[0], p_1[1], p_1[2]);
    float p_3[3] = {sin(theta+a)*cos(phi+c+a/2.0f), 
    sin(theta+a)*sin(phi+c+a/2.0f), 
    cos(theta+a)};
    glVertex3f(p_3[0], p_3[1], p_3[2]);

    float p_2[3] = {sin(theta)*cos(phi+c+a), 
    sin(theta)*sin(phi+c+a), 
    cos(theta)};
    glVertex3f(p_2[0], p_2[1], p_2[2]);   
    glEnd();
}

是否有一半的三角形方向错误?http://math.hws.edu/graphicsnotes/c3/s2.html

此代码的几个问题:

  1. 对循环条件使用浮点测试。请记住,浮点运算并不精确。你有大约50%的机会比你预期的多通过一次循环
  2. 对于标准球面坐标,θ的范围应该是0..pi,而不是0..2*pi
  3. 您需要在循环中生成一个四边形,而不是三角形。画一张地图。如果你看两条经线和两条纬线之间的区域,它有4个角
  4. 我不明白你的价值观c在做什么。不确定这是一个问题,还是我只是不明白
  5. 这不是正确性问题,但您可以将glBeginglEnd调用置于循环之外