我正在尝试使用freeglut创建一个8个钉板的环。每个板应相对于中心球旋转/倾斜30度,并且所有板应该以环形形式订购。这是一个例子:
这是我的尝试:
void Larvitar::drawTail()
{
// Create tail ball
glPushMatrix();
glColor4f(0.2, 0, 1, 1.0);
GLUquadric *tail;
tail = gluNewQuadric();
glTranslatef(0, 0.2, -3.0);
gluSphere(tail, 1, 100, 30);
glPopMatrix();
double xrotate = 30;
for (int i = 0; i < 360; i += 45)
{
double rnd = ((double)rand() / (RAND_MAX));
glPushMatrix();
glColor4f(rnd, 0, rnd, 1.0);
glRotatef(xrotate, 1, 0, 0); // kippen?
glRotatef(i, 0, 0, 1); // Kreisform
glScalef(1, 0.4, 2);
glTranslatef(0, -2, -2.1);
glutSolidCube(1);
glPopMatrix();
xrotate -= xrotate;
}
}
问题在于板块呈环形但不是每个板块向外倾斜30度,只有第一个板块倾斜。我究竟做错了什么?如何在循环中解决这个问题,而不必手动创建每个板块?
答案 0 :(得分:0)
自己解决了。
void Larvitar::drawTail() {
// Create tail ball
glPushMatrix();
glColor4f(0.2, 0, 1, 1.0);
GLUquadric *tail;
tail = gluNewQuadric();
glTranslatef(0, 0.2, -3.0);
gluSphere(tail, 1, 100, 30);
glPopMatrix();
glColor4f(0.58, 0.655, 0.482, 1.0);
for (int i = 0; i < 360; i += 45) {
glPushMatrix();
glRotatef(i, 0, 0, 1);
glRotatef(30, 1, 0, 0);
glScalef(1, 0.5, 2);
glTranslatef(0, -2, -2.1);
glutSolidCube(1);
glPopMatrix();
}
}