穗状花序环

时间:2018-05-17 08:25:03

标签: c++ shape freeglut

我正在尝试使用freeglut创建一个8个钉板的环。每个板应相对于中心球旋转/倾斜30度,并且所有板应该以环形形式订购。这是一个例子:

enter image description here

这是我的尝试:

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度,只有第一个板块倾斜。我究竟做错了什么?如何在循环中解决这个问题,而不必手动创建每个板块?

1 个答案:

答案 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();
    }
}