2012年6月11日 星期一

作業四-著色與從檔案讀取3D物件練習

一、主題 - 鐵盒子校園

        此次作業要求我們讀取obj檔以及著色,並且延續第三個作業的視角移動模式。

二、成果展示與過程



讀取檔案的地方是利用網路上載的glm裡面的function,這次的obj檔自己做的其實蠻醜的,除了一館還能看以外, 原本是利用3Ds MAX來畫,但是發現對我來說有點難以操控,所以換成了Sketchup來畫,畫圖過程較輕鬆,只是在作業最後的地方因為Sketch up沒有自動group的功能,導致匯出的obj檔有個大問題,就是他只會讀到第一個顏色...所以煩惱了很久,之後才發現必須自己把同個顏色的model新增成一個群組,才可以讀取道不同的顏色,而這次也設置了Lighting的功能,只是有兩個館離比較遠所以黑黑的...


三、心得與感想

覺得自己做model還蠻有趣的,在空間設計上比用code慢慢一個面一個面用快多了...
   

2012年5月20日 星期日

作業三 - 元智校園導覽

一、主題介紹 - 簡略元智校園導覽

        這次作業要求能夠移動Camera的位置已達到能從各個角度以及位置觀看校園,與第二次作業不同的只是多加了移動視角以及各個物體的位移。

二、成果展示與過程





恩...這次其實就是把第二個作業多加了可移動的視角,且投影方式從Ortho => Perspective 增加了遠近感 , 移動的方式參照教授給的範例,而走路的上下位移其實也只是用了y += sin (d)  [  d是移動的距離  ],造成上下位移,其他建築物則是利用glTranslatef以及glRotatef來改變位置與方向,由於有些畫的太大 有用glScalef來縮放,沒有新加甚麼。


三、心得與感想

原先是想利用texture mapping但是glm怪怪的(可能是我下載的怪怪的)所以暫時放棄,只能用超級簡略長方形+圓柱來表達(其實根本是懶...),碰撞以及跳躍兩個半成品功能就先沒放了。
恩...沒甚麼感想....

2012年4月30日 星期一

作業二~ 3D一館

一、主題介紹 - 小學生畫3D一館
     
        好吧主題有點偷懶,
        從上次的平面到現在的三維空間,
        讓人能夠以各個方向來觀看一館。


二、成果展示與過程

        首先先放上結果圖:







蠻偷懶的,我沒有像其他人一樣連窗戶門戶都以立體的方式慢慢疊起來,我的空間感實在差的很奇妙,每次都會錯亂所以放棄了。

此次作業要求可以從不同角度觀看,我利用了glRotate( 角度 , x, y, z) 來旋轉。

首先以Keyboard的方式,在角度的地方加入變數,再用wasd四個按鍵來控制,a d是以Y軸來旋轉(也就是左右),而w s以X軸來旋轉(上下),這個方法屬於簡單的參數旋轉。

第二個是以MouseMotion來旋轉,首先我宣告了X,Y個別宣告三個參數:rotrecordx、rotrecord、rotx、roty、afrotx、afroty

利用MouseMotion的function,也就是glutMousefunc來取得目前滑鼠在內部的座標,當滑鼠按下時,將x y 記錄到rotx, roty, 而放開的時候則在Motionfunc裡面設置afrotx afroty兩個來記錄放開時的x y 與按下時的座標相差多遠,也就是減去rotx roty,得到的就是你滑鼠移動的向量,當然,向量並不是角度,但是它可以用來知道你滑鼠的位移量,放在rotate裡面可以當作角度的大小,而rotrecord則是必須記錄下你旋轉過後的位置,也就是總位移量,必須記錄從開始到目前總共旋轉了多少的位移量,然後再利用glRotate(rotrecord + afrot , x ,y ,z)就可以輸入旋轉的方向以及旋轉的軸來做滑鼠旋轉囉 ! !


接下來提一下上一次在平面圓柱的問題,在立體的空間中要怎麼畫圓柱呢?

上網找了一下

GLUquadricObj *quadratic;
gluCylinder(quadratic,20,20,20,32,32);
quadratic=gluNewQuadric();


這個是opengl內建的可以用來畫圓柱,我是只換過前三個數字參數 "下圓的半徑、上圓的半徑、圓柱的高度" ,畫完後再利用glTraslatef來位移,此外記得利用glPushMatrix();   glPopMatrix();兩個來包起來,包起來的作用是在你想單獨traslation一個物品的時候可以隔開,不然沒隔起來就會發現整個世界都跟著變了。



glPushMatrix();
glColor3f(0.5,0.5,0.5);
glTranslatef(52,10,30);
glRotatef(90,1.0,0.0,0.0);
GLUquadricObj *quadratic;
quadratic=gluNewQuadric(); 
gluCylinder(quadratic,15,15,70,20,50);
glPopMatrix();

會變成這樣, 因為畫出來的時候上下兩個口是對著camera的,所以記得轉個90度。

三、心得與感想

從下次開始的作業應該會用到model的製作吧,個人還沒用過3D MAX之類的model製作軟體,挺感興趣的,專題訓練時只有利用glm來讀教授給的obj檔而已,自己做好像很有趣(?)。這次另物體可以旋轉,當然也可以利用LookAt來改變camera的位置以及視角,但是一想到圓的方程之類的我就暫時換掉了,還是簡單易懂的方式好...




2012年3月19日 星期一

作業一 元智一館

一、主題介紹 - 小學生畫一館
        此次作業要求以2D平面表現出元智一館,元智一館對於資工人來說實在是熟悉的不能再熟
悉了,但是熟悉歸熟悉,一館還有許多我們不知道的美麗,藉著這次作業來表達自己對一館的
熱愛( .......... )。

二、程式設計與寫作方法、執行結果呈現
     
    作業結果:
    因為DEV在我的電腦裡出了點問題,所以我是用Vitual Studio 2008來寫的,程式主要是用OPENGL內的函式編輯,有利用到的有GL_POLYGON(用來填色)、GL_LINE_LOOP(凸顯輪廓)以及glColor3f(R,G,B)來調色,因為本人對於光影色差的功夫實在是奇差無比所以只是利用點之間的色差來做一點漸層而已,窗戶因為剛做的時候只想到forloop來重複繪畫,沒有想到直接畫一排在用線來分隔所以有點歪斜,而圓柱也是利用色差來表達,OPENGL內並沒有畫平面圓的函式,有的只是內建圓(還是3D的,雖然還是可以用啦)。

    OPENGL的繪畫方式是由底部往上畫,所以在畫的時候必須注意前後順序,不然會使一些地方被掩蓋住。

三、心得與討論

       主要是剛開始畫的時候沒把視窗的座標以及Ortho的範圍調大,等到畫一畫才覺得座標實在是太小了整個難算到爆炸,到最後還是沒調(有點...),所以細節部分到最後根本就是完全放棄掉,還有輪廓線也導致畫面真的很2D...原本想要表現的樣子也表達不出來。

       可以改進的部分很多(根本全部),圓柱的部分可以利用內建圓在利用scale來拉長最後再配合POLYGON來畫,而在物體本身的立體感則是因為view volunm實在是太小造成自己算到最後實在是無法繼續算下去,而且太小了會導致鋸齒出現,窗戶歪歪斜斜的,有用過GL_POLYGON_SMOOTH但是試下去結果好像也沒變太多...

      總之美術很差啊....


                                                                                                   END...