【问题标题】:Why does glTranslatef() resize object?为什么 glTranslatef() 会调整对象的大小?
【发布时间】:2022-01-23 00:04:20
【问题描述】:

我有 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 的前两个参数可以很好地向左/向右和更近/更远移动对象,那么为什么第三个参数会改变对象的大小?

【问题讨论】:

    标签: c++ opengl glut opengl-compat


    【解决方案1】:

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

    【讨论】:

    • 看起来确实如此,但是我的旋转函数不知何故与它的位置混淆了,所以从上面看起来很好,好像我在这里问错了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 2014-02-20
    • 2011-03-09
    • 2019-12-08
    • 1970-01-01
    相关资源
    最近更新 更多