我有一堆形状的场景,如下所示:
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();
如何在不单独浏览和更改每个坐标的情况下将所有形状设置为一半?
答案 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
将四边形放置在您想要的位置。当然,以这种方式做事情有点傻,至少,你应该将每个值乘以一次并记住它们,但你明白了。