gpt4 book ai didi

c++ - 如何将一系列形状缩小一半?

转载 作者:行者123 更新时间:2023-11-28 01:05:56 24 4
gpt4 key购买 nike

我有一个有一堆形状的场景,画成这样:

    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();

如何在不单独遍历和更改每个坐标的情况下将所有形状缩小一半?

最佳答案

这个问题有点模棱两可。您要求将四边形设为其原始大小的一半,但您没有规定一旦更改大小后它们应该位于何处。标准方法是应用比例因子:

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 将四边形放置在您想要的位置。当然,这样做有点傻,至少,你应该将每个值相乘一次并记住它们,但你明白了。

关于c++ - 如何将一系列形状缩小一半?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6147027/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com