1

我想在 OpenGL 2.0 中创建一个雪人。我想旋转整个形状,但每次运行程序时它都不起作用。

    glPushMatrix();

    //bottom sphere
    glTranslated(tranX,tranY-2,tranZ);
    glRotated(rotX,1,0,0);
    glRotated(rotY,0,1,0);
    glRotated(rotZ,0,0,1);
    glScaled(scaX,scaY,scaZ);

    glColor3f(1.1,.7,.99);
    glutSolidSphere(1.5,30,30);

    //middle sphere
    glTranslated(tranX,tranY+2.3,tranZ+8);
   glRotated(rotX,1,0,0);
    glRotated(rotY,0,1,0);
    glRotated(rotZ,0,0,1);
    glScaled(scaX,scaY,scaZ);

    glColor3f(1.1,.7,.99);
    glutSolidSphere(1.3,30,30);

    //top sphere
    glTranslated(tranX,tranY+2,tranZ+10);
    glRotated(rotX,1,0,0);
    glRotated(rotY,0,1,0);
    glRotated(rotZ,0,0,1);
    glScaled(scaX,scaY,scaZ);

    glColor3f(1.1,.7,.99);
    glutSolidSphere(1,30,30);
glPopMatrix();
4

1 回答 1

2

关于 OpenGL 变换需要了解的是它们会修改当前坐标系,而不是单个对象。例如,当您调用 时glRotated,它会围绕所提供的轴旋转坐标系提供的角度,并在调用它后影响您渲染的每一位几何图形,直到您更改或替换矩阵(通过调用glPopMatrixglLoadMatrix等)。

在您的示例中,您旋转了雪人的每个球体,但没有影响场景中所有对象的总体旋转。尝试在调用后立即将要影响整个场景的旋转放在glPushMatrix例程的顶部。

于 2013-03-03T02:47:25.597 回答