通过glTranslate将glQuads重新定位到另一个位置-OpenGL

4

起初,我有一个简单的白色长方体,如下所示:

enter image description here

以下是代码:

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

然后,我想画另一个像这样的长方体:

enter image description here

我能否只使用 glTranslate 来重新绘制另一个长方体,而不必手动插入数字?


3
简单的回答是“是”。 - benjymous
2
你们为什么还使用直接模式? - Ivan Aksamentov - Drop
@Drop Yea,看到人们使用已弃用的函数,让我感到很难过。 - vallentin
@Vallentin,如果它已经被弃用了,你能提供好的替代品吗? - noobprogrammer
你说它已经废弃了,这意味着应该避免使用这段代码。那么,你可以给我展示一个比这个更好的代码吗? - noobprogrammer
显示剩余3条评论
1个回答

6

是的,创建一个函数来调用绘制棱柱的命令,其模型坐标为drawPrism。然后在代码中可以这样实现:

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

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

我不知道glTranslate中的3个参数x1,y1,z1应该插入什么坐标。 - noobprogrammer
这取决于你。这些将是世界坐标。基本上根据质心将它们放置在世界坐标中心。需要一些调整和尝试。 - pippin1289
例如,如果我想要棱镜在(-10,-5,0)处居中,那么这是x1、y1和z1的良好起点。 - pippin1289

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接