這次作業是要繪製3D機器人,這機器人每部分都是使用
glutSolidCube 和 glutSolidSphere 兩種函式完成
剛開始的機器人:
看起來很不立體,後來想到要打光,於是在init()加入光的一些參數:
GLfloat position[] = { 1.0, 1.0, 1.0, 0.0 }; //光源位置
glLightfv(GL_LIGHT0, GL_POSITION, position);
glShadeModel (GL_SMOOTH);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
之後可以讓機器人有立體感:
糟糕的情況出現了...機器人變成黑白的! 這裡花了我很久的時間研究,
後來發現可以利用:
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
這些材質的函式去調每個部分的色彩。
完成機器人架構後開始替他增加功能,全部的部分我都利用:
glPushMatrix();
glTranslatef (oX, oY, oZ); //以這裡為轉動中心點
glRotatef ( rO, 1.0, 0.0, 0.0); //轉動
glTranslatef (rX, rY, rZ); // 離轉動中心多遠
glScalef (sX, sY, sZ);
glutSolidCube (1.0);
glPopMatrix();
利用平移和轉動可以讓機器人做各種動作!
走路(按w):

彎腰(按s):
二.心得與討論
這次的作業很有趣,最花時間的部分大概就是
調整轉動中心和讓機器人看起來更有立體感。
這次感覺對opengl更瞭解了,例如這次我設計機器人
他每個身體的架構只差在位置和大小,就可以自己宣告
//drawCube(ownRotateX,ownRotateY,ownRotateZ,RotateObject,revolutionX,
revolutionY,revolutionZ,scaleX,scaleY,scaleZ, r, g, b);
和
void drawSphere(GLfloat oX,GLfloat oY,GLfloat oZ, GLfloat r, GLfloat g, GLfloat b, GLfloat radius, GLfloat rO);
這樣就讓程式碼大幅縮減。



