【OpenGL】機器人手臂的實現

一、基本功能

實現了機器人的一隻手臂,由上臂、下臂、五根手指共同組成,通過A、S、D、F、G鍵向上旋轉,通過a、s、d、f、g鍵向下旋轉,通過方向鍵left和right轉向,通過up和down實現放縮。

效果圖如下:

 

二、實現過程

 

1、實現手臂

對於手臂的實現,可以使用一個經過放縮後的立方體作爲手臂的一段。手臂模型搭建好後,就是要確定手臂的位置,因爲手臂進行旋轉,不是繞手臂的中心節點(等同於立體體的體心)進行旋轉,它是繞手臂的一條邊(等同於立方體的一條邊)進行旋轉。

因此先調用glTranslatef()函數移動至手臂的旋轉邊上,在旋轉邊進行旋轉glRotate(),再走glTranslatef()進行繪製,此時繪製點即手臂的中心節點,而我們旋轉的位置在手臂的旋轉邊上。實現代碼如下所示:

glTranslatef(0.0, 0.0, -distance);

    glRotatef(theta, 0.0, 1.0, 0.0);

    /*繪製第一段*/

    glTranslatef(-1.0*n, 0.0, 0.0);

    glRotatef(shoulder, 0.0, 0.0, 1.0);

    glTranslatef(1.0*n, 0.0, 0.0);

    glPushMatrix();

         glColor4f(1.0f, 0.0, 0.0, 0.0);

         glScalef(2.0*n, 0.4*n, 1.0*n);

         glutSolidCube(1.0);

         //glutWireCube(1.0);

    glPopMatrix();

繪製完該段手臂後,可以繼續使用上述代碼實現下臂。

 

2、實現手指

因爲手指的寬度是比手臂要窄的多,因此,繪製手指,需要先沿手臂寬度方向移動位置,設置好每個手指的起始位置,而手指的位置方法同手臂,因此循環上述過程即可。

 

3、實現手動控制手臂的轉動

通過創建鍵盤響應的相應回調函數即可實現這一功能。

 

4、遇到的問題與思考

在實現過程中,我在手指的繪製過程中卡了一下,因爲我自己認爲我寫的幾何變換沒有問題,但是卻無法被繪製出來,因此我想造成這種問題是否是我幾何變換導致的,因此我反覆推算幾何變換過程的結果,自己覺得並沒有問題,因此我進行放縮、旋轉進行觀察,判斷其是否可能是因爲被裁剪掉了,之後我發現也不是這個問題,因此我想是不是我給的放大係數n12、n13太小了導致的。因此我將其放大到與n一樣的大小,甚至更大,我發現我的手指可以畫出來,只是很小,我再次推送我的幾何變換式子,發現了問題之所在,我對glScalef的變換沒有去保護環境,也就是說,我的手指,是在n11的基礎上進一步被縮小了,而我的n11放縮係數是第一節手指,n12是第二節手指,因此我第二節手指的實際放縮倍數爲了n11*n12,導致畫出的手指很小,幾乎看不到,導致這一結果的原因也是因爲,自己一直漏考慮到了glScalef的變換。

 

5、源代碼

待上傳

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章