【问题标题】:Rotating multiple shapes in OpenGL在OpenGL中旋转多个形状
【发布时间】:2015-03-17 15:05:21
【问题描述】:

我正在使用 OpenGL,并且有一堆圆柱体通过我要旋转的球体连接。

我正在制作一种“管道”的东西,并希望旋转平滑(所以当底部圆柱体旋转时,顶部圆柱体会相应移动,但顶部圆柱体可以旋转而不移动底部圆柱体

唯一的问题是我想以此为基础,但即使现在只有圆柱体,我也无法在不移动整个物体的情况下让顶部旋转。

我的代码是:

void draw_cylinder(float translate_x, float translate_y, float angle1) {
GLUquadricObj *qobj = gluNewQuadric();

  //first cylinder
  glPushMatrix();
  glTranslatef(translate_x, translate_y-0.5, 0.0);
  glRotatef(angle1, 0.0, 0.0, 1.0);

    glPushMatrix();
    glRotatef(90.0, -45.0, 0.0, 0.0);
    gluCylinder(qobj, 1.0, 1.0, 10.0, 20, 20);
    gluQuadricOrientation (qobj, GLU_INSIDE);
    gluDisk(qobj, 0.0, 1.0, 20, 20);
    glTranslatef(0.0, 0.0, 10.0);
    gluQuadricOrientation (qobj, GLU_OUTSIDE);
    gluDisk(qobj, 0.0, 1.0, 20, 20);
    glPopMatrix();

    glPushMatrix();  //Connecting sphere
      glTranslatef(translate_x, translate_y+10.5, 0.0);
      glutSolidSphere(1,20,20);
    glPopMatrix();

      //second cylinder
      glPushMatrix();
      glTranslatef(translate_x, translate_y+11.3, 0.0);
      glRotatef(angle2, 0.0, 0.0, 1.0);

        glPushMatrix();
        glRotatef(90.0, -45.0, 7.0, -7.0);
        gluCylinder(qobj, 1.0, 1.0, 5.0, 20, 20);
        gluQuadricOrientation (qobj, GLU_INSIDE);
        gluDisk(qobj, 0.0, 1.0, 20, 20);
        glTranslatef(0.0, 0.0, 5.0);
        gluQuadricOrientation (qobj, GLU_OUTSIDE);
        gluDisk(qobj, 0.0, 1.0, 20, 20);
        glPopMatrix();

  glPopMatrix();
glPopMatrix(); }

任何帮助将不胜感激

【问题讨论】:

  • 这听起来像骨骼动画,研究一下这个主题,你可能会得到答案

标签: c++ opengl rotation


【解决方案1】:

您要问的是我猜围绕不同点而不是原点旋转。您可以查看this question

在你的情况下:

  • 当您想旋转整个手臂时,请使用下圆柱的底部中心点作为参考点,并将该过程(在链接的答案中)应用于所有圆柱。

  • 当你想旋转你的上臂时,使用连接球体的中心作为参考点,并将这个过程(在链接的答案中)应用到你的上圆柱体。

【讨论】:

    猜你喜欢
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    相关资源
    最近更新 更多