使用GLUT将3D球体的旋转更改为完全相反的方向

时间:2016-04-07 06:53:52

标签: opengl graphics 3d rotation glut

我有一个用旋转球体(glutWireSphere)创建的程序,我喜欢将旋转更改为完全相反的方向。

例如,如果它在Y轴上缓慢旋转CW,我希望它旋转CCW。

这是我到目前为止的代码:

float angle = 0.;

void display() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glPushMatrix();
    glTranslatef(0., -1.5, 0.);
    glRotatef(angle, 0.5, 1., 0.5);
    glColor3d(0, 0, 1);
    glutWireSphere(2, 25, 15);
    glPopMatrix();
    glutSwapBuffers();
    glFlush();
}

void idle() {
    angle += 0.2;
    if (angle > 360.) angle -= 360.;
    glutPostRedisplay();
}

void myinit() {
    glClearColor(1.0, 1.0, 1.0, 1.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-6., 6., -6., 6., -6., 6.);
    glMatrixMode(GL_MODELVIEW);
}

void main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB);
    glutInitWindowSize(400, 400);
    glutInitWindowPosition(10, 10);
    glutCreateWindow("3d objects");
    glutDisplayFunc(display);
    glutIdleFunc(idle);
    glEnable(GL_DEPTH_TEST);
    myinit();
    glutMainLoop();
}

要做我刚刚写的内容,我更改了X Y&的值Z函数的glRotatef函数内的display个参数-0.5,-1.,-0.5,我仍然得到完全相同的旋转。

我还尝试将idle函数更改为此(使用原始glRotatef参数):

void idle() {
    angle -= 0.2;
    if (angle < 0.) angle += 360.;
    glutPostRedisplay();
}

然而,同样的轮换。

我在这里对glRotatef函数的理解缺少了什么?

1 个答案:

答案 0 :(得分:0)

正如JordiC评论的那样,由于它是一个完美的球体,很难看到形状的真正旋转。

我在Sphere内部添加了一个Cone,现在我可以清楚地看到旋转是相反的。