C++ 通过glTranslate-OpenGL在另一个位置重新绘制glQuads

C++ 通过glTranslate-OpenGL在另一个位置重新绘制glQuads,c++,c,opengl,3d,glut,C++,C,Opengl,3d,Glut,首先,我有一个简单的白色矩形棱镜,如下所示: 代码如下: glBegin(GL_QUADS); glColor3f(255,255,255); glVertex3f( 0.3, 0, 2.5);//sisi bawah glVertex3f(0.5, 0, 2.5); glVertex3f(0.5, 0, 2.6); glVertex3f( 0.3, 0, 2.6); glV

首先,我有一个简单的白色矩形棱镜,如下所示:

代码如下:

 glBegin(GL_QUADS);               

      glColor3f(255,255,255);    
      glVertex3f( 0.3, 0, 2.5);//sisi bawah
      glVertex3f(0.5, 0, 2.5);
      glVertex3f(0.5, 0,  2.6);
      glVertex3f( 0.3, 0,  2.6);

      glVertex3f(0.5, 0,  2.6);//sisi kiri
      glVertex3f( 0.3, 0,  2.6);
      glVertex3f( 0.3, 1.5,  2.6);
      glVertex3f(0.5, 1.5,  2.6);

      glVertex3f(0.5, 0, 2.5);//sisi depan
      glVertex3f(0.5, 0,  2.6);
      glVertex3f(0.5, 1.5,  2.6);
      glVertex3f(0.5, 1.5,  2.5);

      glVertex3f( 0.3, 0, 2.5);//sisi belakang
      glVertex3f( 0.3, 0,  2.6);
      glVertex3f( 0.3, 1.5,  2.6);
      glVertex3f( 0.3, 1.5, 2.5);

      glVertex3f( 0.3, 1.5, 2.5);//sisi atas
      glVertex3f(0.5, 1.5, 2.5);
      glVertex3f(0.5, 1.5,  2.6);
      glVertex3f( 0.3, 1.5,  2.6);

      glVertex3f(0.5, 0,  2.5);//sisi kanan
      glVertex3f( 0.3, 0,  2.5);
      glVertex3f( 0.3, 1.5,  2.5);
      glVertex3f(0.5, 1.5,  2.5);

glEnd();
然后,我想画另一个矩形棱镜,像这样:


我可以只用
glTranslate
重新绘制另一个棱柱吗?这样我就不必手动插入数字了?

是的,创建一个函数来调用绘制棱柱体时关于其模型坐标的绘制命令,
drawPrism
。然后在代码中可以执行以下操作:

//draw prism 1
glPushMatrix();
glTranslate(x1, y1, z1);
drawPrism();
glPopMatrix();

//draw prism 2
glPushMatrix();
glTranslate(x2, y2, z2);
drawPrism();
glPopMatrix();

简单的回答是“是的”,为什么你们所有人仍然使用即时模式?@Drop Yea,看到人们使用不推荐的函数,我很难过。@Vallentin所以如果它不推荐,你能提供好的吗?你说“你能提供好的”是什么意思实际上,您提供的代码100%都不推荐使用。我不知道应该在glTranslate中的3个参数x1、y1、z1中插入什么坐标。这取决于您。这些将是世界坐标。基本上把它们放在基于重心的坐标系中。这将需要一些调整和播放,例如,如果我希望棱镜的中心位于(-10,-5,0),那么这分别是x1、y1和z1的一个良好起点