1.程式設計與寫作方法:
這次作業的場景我主要是用 3d max 來做的,3d max 在做模組的方面比較方便,裡面可以用各種形狀組成各館的型狀。

2.心得與討論二
運用這次剛開始不知道有3d max那麼方便的軟體,後來發現真是好用,運用3D MAX來創建模組,直接讀取模組,讓程式看起來可以更加逼真。
這次作業 是要用之前的3D機器人,加上一些場景和打光
打光的部分可以在init() 裡面用到
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); //環繞光源
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); //擴散光源
glLightfv(L_LIGHT0, GL_SPECULAR, specular); //反射色彩
glLightfv(GL_LIGHT0, GL_POSITION, position);//光位置
glLightfv(GL_LIGHT0, GL_POSITION, position);
這些函式讓機器人看起來更立體。
之後我利用查到的LoadGLTextures()和LoadBMP兩個function可以貼圖
有了上面兩個function後就可以在display裡面使用
glBindTexture(GL_TEXTURE_2D, texture[select]);來貼圖
二.心得與討論
這次的作業打光比較容易,打光之後3D機器人要用glMaterialfv這
function來上色,相較之下貼圖部分就花了很久的時間研究,貼圖後
圖片呈現有些角度看起來很模糊不理想,希望後來可以利用更多功能
讓我們的場景看起來更真實。
這次作業是要繪製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);
這樣就讓程式碼大幅縮減。