0

我在实现一个可以拾取对象的机械臂时遇到了麻烦,因为我在实现中调用了 glTranslate()、glRotate(),机器人的每个部分都依赖于前一部分。

例子:

     void drawRobo()
         {

              draw a Cylinder as Base;

              glTranslate(); 
              drawArmpart1();
              glTranslate();  
              drawJoint1();
              glRotate();  
              drawArmpart2();
              glTranslate();
              drawGrabbers(); // The claw or the endeffector   


         }
    void drawObjects()
          {
           glTranslate();
           drawCube() // Object
           glTranslate();
           drawSphere() // Object 2

          }

    void display()
      {
       drawRobo();
       drawObjects();
       glPostredisplay();
      }   

现在的问题是当我使用 glRotate() 旋转末端执行器或抓取器时;我的物体也会旋转,我不希望这样。我希望能够旋转关节和手臂,使其更靠近物体,然后我想使用抓取器来拾取它们。

我该如何处理?我在所有需要它们的地方都有 glPushMAtrix() 和 glPopMatrix() 命令。

4

1 回答 1

4

既然你有这个问题,很明显你没有适当的推送和弹出矩阵操作。你的伪代码应该是:

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// setup view matrix

glPushMatrix();
// setup robot's world matrix
drawRobo();
glPopMatrix();

// setup object's world matrix
drawObjects();

glutPostRedisplay();

请注意,最后一次绘制调用不使用推送/弹出 - 只是因为它是最后一次,所以您不需要在它之后恢复矩阵。

于 2013-10-23T04:14:07.160 回答