【问题标题】:Redraw glQuads at another position by glTranslate - OpenGL通过 glTranslate 在另一个位置重绘 glQuads - OpenGL
【发布时间】:2013-10-16 16:22:17
【问题描述】:

一开始我有一个像这样的简单的白色矩形棱镜:

代码如下:

 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 重新绘制另一个棱镜,这样我就不必手动插入数字了吗?

【问题讨论】:

  • 简单的答案是“是”
  • 为什么你们还用即时模式?
  • @Drop 是的,看到人们使用已弃用的功能,我很难过。
  • @Vallentin 所以如果它被弃用了,你能提供好的吗?
  • “你能提供好的代码吗”是什么意思,实际上你提供的代码 100% 已被弃用。

标签: c++ c opengl 3d glut


【解决方案1】:

是的,创建一个函数来调用绘图命令绘制关于其模型坐标的棱镜,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不知道应该插入什么坐标。
  • 这取决于你。这些将是世界坐标。基本上将它们放置在基于质心的世界坐标中。这需要一些调整和演奏
  • 例如,如果我希望棱镜以 (-10, -5, 0) 为中心,那么这分别是 x1、y1 和 z1 的一个很好的起点
猜你喜欢
  • 2012-06-01
  • 1970-01-01
  • 2012-10-30
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
  • 2014-03-04
相关资源
最近更新 更多