如何制作一半大小的一系列形状?

时间:2011-05-27 01:48:33

标签: c++ opengl

我有一堆形状的场景,如下所示:

    glBegin(GL_QUADS);
    glVertex3f(-0.7f, -0.5f, 0.0f);
    glVertex3f(0.7f, -0.5f, 0.0f);
    glVertex3f(0.4f, 0.5f, 0.0f);
    glVertex3f(-0.4f, 0.5f, 0.0f);
    glEnd();

如何在不单独浏览和更改每个坐标的情况下将所有形状设置为一半?

1 个答案:

答案 0 :(得分:3)

这个问题有点含糊不清。您要求将四边形设置为原始尺寸的一半,但是一旦尺寸发生变化,您就没有规定它们的位置。标准方法是应用缩放因子:

glPushMatrix();
glScaled(.5,.5,.5);

glBegin(GL_QUADS);
glVertex3f(-0.7f, -0.5f, 0.0f);
glVertex3f(0.7f, -0.5f, 0.0f);
glVertex3f(0.4f, 0.5f, 0.0f);
glVertex3f(-0.4f, 0.5f, 0.0f);
glEnd();

...
glBegin(GL_QUADS);
...
glEnd();

glPopMatrix();

这会在glScale通话后缩放所有内容,直至glPopMatrix()。因此,四边形将是尺寸的一半,但也将是距离原点一半的距离(这里不是一个以原点为中心的问题)。如果你想将缩放因子应用于四边形,而不是它们的位置,你可能需要这样的东西:

glPushMatrix();
glTranslated(xx,yy,zz);
glBegin(GL_QUADS);
glVertex3d( ww*ss, hh*ss,0);
glVertex3d(-ww*ss, hh*ss,0);
glVertex3d(-ww*ss,-hh*ss,0);
glVertex3d( ww*ss,-hh*ss,0);
glEnd();

glPopMatrix();

然后,您只需将ss设置为所需的值,然后使用xx,yy,zz将四边形放置在您想要的位置。当然,以这种方式做事情有点傻,至少,你应该将每个值乘以一次并记住它们,但你明白了。