2013-10-23 55 views
0

我在執行可以選擇對象的機器人手臂時遇到問題,因爲我的實現中有glTranslate(),glRotate()調用,機器人的每個部分都依賴於前一部分。如何繪製一個可以在OpenGL中拾取對象的機器人手臂?

實施例:

 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

既然你有這個問題,很顯然你有適當的推動和彈出矩陣操作。你的僞代碼應該是:

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

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

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

glutPostRedisplay(); 

注意,最後繪製調用不要使用PUSH/POP - 只是因爲它是最後一個,所以你不需要後恢復矩陣。

+0

謝謝,我的對象不再旋轉..最後glPopMatrix();我錯了。我怎麼知道我的手臂已經接近了一個物體,這樣我就可以把它撿起來?對象被翻譯並從終止器旋轉,然後繪製...有沒有一種簡單的方法來獲得相反的變換,使一切都在同一個座標空間?有 –

+0

有。您可以計算機器人的世界矩陣(與傳遞給GL的值相同)並將其乘以手臂座標。因此,您將在世界(即全球)空間中獲得您的手臂位置。然後'length(arm_position - object_position)'會給你距離。這需要一些關於線性和矢量代數的知識 - 但是說實話,這根本不是GL-相關 - 只是數學。 – keltar