为什么 glTranslatef() 会调整对象的大小?

Why does glTranslatef() resize object?

我有 3 个矩形,我需要将它们放置在讲台的形状中。此时他们看起来像这样:

显示函数代码:

    glPushMatrix();
    glRotated(rotate_x, 1.0, 0.0, 0.0);
    glRotated(rotate_y, 0.0, 1.0, 0.0);
    glScalef(1, 3, 1);
    glColor3fv(gold);
    glutSolidCube(2);
    glPopMatrix();
    
    
    

    
    glPushMatrix();

    glTranslated(2, 0, -3);
    glRotated(rotate_x, 1.0, 0.0, 0.0);
    glRotated(rotate_y, 0.0, 1.0, 0.0);
    glScalef(1, 2, 1);
    glColor3fv(silver);
    glutSolidCube(2);
    glPopMatrix();


    glPushMatrix();
    glTranslatef(-2, 0, 0);
    glScalef(1, 1, 1);
    glRotated(rotate_x, 1.0, 0.0, 0.0);
    glRotated(rotate_y, 0.0, 1.0, 0.0);
    glColor3fv(bronze);
    glutSolidCube(2);
    glPopMatrix();

当我尝试使用 glTranslatef(-2, 0, -2) 将银色矩形向下移动一点点以使其与黄色矩形处于同一水平时;它只是变小了:

glTranslatef 的前两个参数 left/right 和 closer/further 可以很好地移动对象,那么为什么第三个参数会改变对象的大小?

你把它移远了。距离较远的物体显得较小;这就是透视的工作原理。由于您没有照明、背景对象或任何其他深度提示,因此距离更远与将其缩放到更小的尺寸明显相同。