绘制球体时缺少三角形
Missing triangles when drawing a sphere
我正试图用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
此代码的几个问题:
- 对循环条件使用浮点测试。请记住,浮点运算并不精确。你有大约50%的机会比你预期的多通过一次循环
- 对于标准球面坐标,θ的范围应该是0..pi,而不是0..2*pi
- 您需要在循环中生成一个四边形,而不是三角形。画一张地图。如果你看两条经线和两条纬线之间的区域,它有4个角
- 我不明白你的价值观
c
在做什么。不确定这是一个问题,还是我只是不明白 - 这不是正确性问题,但您可以将
glBegin
和glEnd
调用置于循环之外
相关文章:
- 绘制旋转的三角形
- 绘制顺时针三角形,重新排序点
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 是否可以使用 DirectX 3D 11 绘制由三角形组成的圆?
- OpenGL绘制三角形而不是正方形
- 在 OpenGL 中使用三角形绘制字母?
- 为什么这个在 opengl 中绘制三角形的着色器没有多次运行
- 使用 glDrawArray 函数绘制三角形
- 三角形未绘制.C++/GLEW/SDL.
- GLFW程序不绘制三角形
- OpenGL不会绘制三角形,遵循确切的格式
- 使用 C++ 库 GLEW 在 openGl 中绘制一个红色三角形
- 用OpenGL绘制三角形
- 绘制三角形时只有空白屏幕
- OpenGL绘制三角形只有白色
- 使用 OpenGL 绘制基本三角形
- 计算机图形:我自己绘制三角形
- 如何使用OSG API在Osgearth上绘制三角形
- 理解在OpenGL 3.3+内核中使用三角形绘制四边形的代码
- OpenGL:使用退化三角形绘制线条