Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何制作一系列只有一半大小的形状?_C++_Opengl - Fatal编程技术网

C++ 如何制作一系列只有一半大小的形状?

C++ 如何制作一系列只有一半大小的形状?,c++,opengl,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(); glPushMatrix(); glTranslated(xx,yy,zz); glBegin(GL_QUA

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

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

我如何使所有的形状都变小一半,而不单独穿过并改变每个坐标?

这个问题有点模棱两可。您要求将四边形设置为其原始尺寸的一半,但您没有规定在更改尺寸后应将其放置在何处。标准方法是应用比例因子:

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()
。因此,四边形的大小将是原点的一半,但距离原点的距离也将是原点的一半(在这里,四边形以原点为中心不是问题)。如果要将比例因子应用于四边形,但不应用于其位置,则可能需要类似以下内容:

    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();
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
将四边形放置在所需的位置。当然,这样做有点愚蠢,至少,你应该将每个值相乘一次并记住它们,但你明白了。这个问题有点模棱两可。您要求将四边形设置为其原始尺寸的一半,但您没有规定在更改尺寸后应将其放置在何处。标准方法是应用比例因子:

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()
。因此,四边形的大小将是原点的一半,但距离原点的距离也将是原点的一半(在这里,四边形以原点为中心不是问题)。如果要将比例因子应用于四边形,但不应用于其位置,则可能需要类似以下内容:

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

在第二个例子中,你可以将形状转换为原点,缩放,然后再向后平移,以避免修改坐标。@geofftnz这一点很好。由于四边形有意围绕原点居中,因此在绘制四边形之前,可能只应将比例因子作为glScale()应用。在第二个示例中,您可以将形状转换为其原点,缩放,然后再向后平移,以避免修改坐标。@geofftnz很好。由于四边形有意围绕原点居中,因此在绘制四边形之前,比例因子可能仅应作为glScale()应用。