3 回答
TA贡献1868条经验 获得超4个赞
快速解释了示例中的代码。您应该研究一下功能void drawSphere(double r, int lats, int longs):
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(r * x * zr0, r * y * zr0, r * z0);
glNormal3f(x * zr1, y * zr1, z1);
glVertex3f(r * x * zr1, r * y * zr1, r * z1);
}
glEnd();
}
}
参数lat定义了您的球体中要有多少条水平线以及lon几条垂直线。r是球体的半径。
现在在lat/上进行了两次迭代,lon并使用简单的三角函数计算了顶点坐标。
现在计算出的顶点利用发送到您的GPU glVertex...()的GL_QUAD_STRIP,这意味着你要发送形成与先前2派四每两个顶点。
现在,您只需要了解三角函数的工作方式即可,但是我想您可以轻松地弄清楚。
- 3 回答
- 0 关注
- 736 浏览
添加回答
举报