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()命令。
謝謝,我的對象不再旋轉..最後glPopMatrix();我錯了。我怎麼知道我的手臂已經接近了一個物體,這樣我就可以把它撿起來?對象被翻譯並從終止器旋轉,然後繪製...有沒有一種簡單的方法來獲得相反的變換,使一切都在同一個座標空間?有 –
有。您可以計算機器人的世界矩陣(與傳遞給GL的值相同)並將其乘以手臂座標。因此,您將在世界(即全球)空間中獲得您的手臂位置。然後'length(arm_position - object_position)'會給你距離。這需要一些關於線性和矢量代數的知識 - 但是說實話,這根本不是GL-相關 - 只是數學。 – keltar