WEEK16
step01 複習程式碼環境 點線面顏色
step02 移動 motion
step03 複習旋轉(利用mouse)做旋轉
step04 複習階層性轉動關節 利用一個綠色小茶壺 當作白色茶壺的中心點
把白色茶壺的手把一道綠色茶壺的中心點 得到一個glTranslatef()的座標 拿來用
step05 用上一步得到的座標放入程式裡面 作執行
step06 加上 TRT重新執行 讓茶壺轉動(階層性轉動關節)
step07 因為專案執行的位置不對 因此要做修改
在week17_robot 按右鍵 選 properties 選裡面的 Build target 中的執行目錄地方改為 .
做完要回到專案 save everything
把我的模型(機器人)讀到專案裡 但要記得在專案裡多增加一個 glm.cpp 的檔案
要再專案上面多加一行程式碼 #include "glm.h"
就可以把我的機器人模型obj檔 讀到專案裡了
要加上幾個程式碼 : GLMmodel * robot = NULL;///機器人的空指標
glmDraw(robot, GLM_MATERIAL);
robot = glmReadOBJ("model/robot.obj");///讀進一個機器人的obj檔
但因為機器人模型的大小太大 所以沒有看到模型出現
所以加上兩行程式碼 更改模型大小和整體顏色程式碼: glColor3f(1,0,0);///機器人整體顏色
glScalef(0.1,0.1,0.1);///機器人的大小
step08 做貼圖 到第七周的程式碼複製 opencv2.1.0 (裝起來就會有貼圖功能了)
要加上3個咒語
會發現看不太清楚模型 因為之前給了紅色 模型就會變暗
為了讓機器人看起來清楚而且看得到貼圖
因此要改兩個地方
glColor3f(1,1,1);///機器人整體顏色///要把機器人顏色改為白色 就可以看到貼圖了
glmDraw(robot, GLM_MATERIAL|GLM_TEXTURE);///加上texture功能 機器人可以更清楚呈現
為了讓貼圖在模型上是正確位置
加上一行程式碼去測試
glEnable(GL_DEPTH_TEST);///開啟3D的測試功能 讓貼圖的方向更正
想讓機器人能夠做旋轉
要加上一行程式碼( 前面已經宣告了一個angle角度)
float teapotX = 0, teapotY = 0, angle = 0, oldX = 0, oldY = 0;
glRotatef(angle,0,1,0);///機器人對著y軸方向旋轉
step09 把原本讀進整個機器人的模型 變成讀進部分部位的模型
換成只讀進機器人的頭
多增加兩層glPushMatrix()和glPopMatrix()
讓身體和頭同時呈現出來 但整體看起來還是太小了
要把頭移到正確的位置上( 中心點綠色茶壺上面 )
前提是要先把對機器人做旋轉那行先註解掉 不然會亂動
多增加一行程式碼做頭的移動
glTranslated(teapotX,teapotY,0);///讓機器人的頭放到綠色茶壺中心點位置
但頭還不是不太好移
因此改變motion裡茶壺 teapotX teapotY 的值 但是頭的移動速度太慢了
為了讓頭能夠移動快一點 直接改茶壺x y 值後面的數值
teapotX += (x-oldX) / 150.0*5;
為了讓模型變得比較大 位置也不要在這麼上面了
所以需要增加兩行程式碼
glScalef(1.5,1.5,1.5);///機器人的頭和身體再放大一點
glTranslatef(0,-0.5,0);///往下一半(下是-0.5)
利用teapot去幫機器人的頭移動到綠色茶壺的正中心
可以得到一個 glTranslatef( , , )的值
複製起來 拿來用 把茶壺的位置註解掉 換成新的移動值
step10 讓機器人的頭可以有好多個方向可以轉
希望機器人的頭部只轉180度 所以增加一個angle2
step11 讓小黑視窗可以再更大
增加一行程式碼
glutInitWindowSize(500,500);///讓小黑視窗變大
要再把機器人身體其他部位也讀進去
step12
讓手顯示出來
手是在身體和頭的中間
glPushMatrix();///機器人的手
glmDraw(hand_left1,GLM_MATERIAL|GLM_TEXTURE);
glPopMatrix();
一樣是要讓手藉由teapot的座標去移動到綠色茶壺正中心
再把得到的新座標拿過來用
左手中間的手臂是寫在左邊上手臂draw下面
左邊下手臂
右手臂全部
左邊的腳
右邊的腳
step13 以鍵盤控制讓機器人的關節做轉動
把機器人的 angle angle2 角度用陣列裝起來
要把下面有用到Rotate的地方的angle都加上陣列
還要加上鍵盤控制的函數
在加一個ID控制當鍵盤按下哪一個數字是哪一個關節做轉動
















































沒有留言:
張貼留言