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 關注
- 795 瀏覽
添加回答
舉報