如何绘制一个可以在OpenGL中拾取对象的机器人手臂?

时间:2013-10-23 01:03:43

标签: opengl glut freeglut

我在实现一个可以拾取对象的机器人手臂时遇到了麻烦,因为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()命令。

1 个答案:

答案 0 :(得分:4)

由于您遇到此问题,很明显您具有适当的推送和弹出矩阵操作。你的伪代码应该是:

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

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

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

glutPostRedisplay();

请注意,上次绘制调用不使用push / pop - 只是因为它是最后一次,因此您不需要在它之后恢复矩阵。