2012年6月16日 星期六

final project

在這次的final project中

比較困難的是model和texture mapping

在model部分由於自己畫的model都不太好看

所以上網下載了一些model

但在搜尋也花上不少時間

另外在texture mapping部分則是這次才新增進來的功能

不同於範例程式的是

天空的貼圖不是使用box而我是用的是Cylinder

這樣可以讓表面看起來圓滑許多

而草地也是用到貼圖的技巧

而在影片中汽車的移動按下空白可暫停,再按一次可繼續

一樣有做簡單碰撞的處理

把移動的範圍侷限在馬路上 以及不能超過天空的範圍 因此可活動的範圍侷限在一個正方型

2012年6月6日 星期三

HW4:lighting and load model

依照上次作業的方式在改寫

但不同的是要load model進來

於是從網路上下載了樹的model並且安排在右手邊

而lighting的部分雖然有使用glMaterailfv

但卻不見其成效

但是model的material無法很有效的利用

因此model暫時使用綠色而非物件原本的顏色


心得與討論:
觀察過網路上的範例程式之後

發覺較大的較大的動畫程式幾乎不太用到glVertex

取而代之的是許多object

但也因此需要許多時間載入

在下次作業中會將以這種方式寫作

並更加利用glMaterialf的功能

2012年5月17日 星期四

作業三:遊走元智校園

這次多熟悉了許多openGL的function

首先是gluPerspective

再來是由正方形替代許多建築物

因此使用了DisplayList的功能

先將一個正方形畫好放在List中

再利用glTranslatef與glScale來調整正方形的位置大小放在適當的地方

六館的圓柱則是用gluCylinder來繪製

再來是利用glLookat在空間中走動

由於有可能先轉動一個視角,再往前或往後走

因此不會只有x軸移動或是只有y軸移動

所以利用了用了相機位置與原點位置算出了向量,而每次移動0.1個單位向量

    float vx=centx-lookatx;
    float vz=centz-lookatz;
    float vLen=pow(vx*vx+vz*vz,(float)0.5);
    float unitVX=vx/vLen;
    float unitVZ=vz/vLen; 

這麼一來就可以行走斜線

最後則是避免判斷穿牆,由於是不規則形,所以寫了兩次的判斷

只有在這兩個區域內才能移動

                    lookatx+=unitVX*0.1;    //移動+0.1個單位向量               
                    lookatz+=unitVZ*0.1;                                       
                    if(lookatz>=0.2 && lookatx<=1.8 && lookatx>=-0.5 )    //判斷是否穿牆  若無則更新畫面
                    {
                        glutPostRedisplay();
                    }
                    else if(lookatz>=0.2 && lookatz<=2.2 && lookatx<=1.8)
                    {
                        glutPostRedisplay();
                    }
                    else    //如果穿牆 退回原本的位置
                    {
                        lookatx-=unitVX*0.1;                       
                        lookatz-=unitVZ*0.1;
                    }
 
心得:這次的作業多了很多空間的概念,但是由於空間概念不太好,因此在一開始使用gluPerspective的投影方式試了很多次才弄好
第二個困難的地方則是移動相機位置,一開始都只能移動x方向或是z方向,足足想了一個多小時才想到用到單位向量來做移動的計算
總結是上課雖然有很多地方聽不懂,但是真的得經由實作能體會更多東西


2012年4月29日 星期日

作業二:立體元智一館

主題:立體之元智一館

在經過第一次熟悉openGL之後,第二次作業有較快上手的跡象.

在一開始有想過如何呈現"從各個視角"觀看一個物件

在過程中是過glRotate與gluLookAt

但由於glRotate要設定以某點為中心坐旋轉

實作上較為困難

因此改為使用gluLookAt

依據鍵盤的按鍵來決定視角的移動

使用到的是glutKeyboardFunc來做出鍵盤發生事件後所要做的事

剩下的部分則是與第一次作業相似的繪圖

但是改成以立體呈現





心得與討論:相較於第一次的作業,雖然難度提升了不少,但是花的時間卻差不多,在熟悉環境上減少了許多時間,但是對於要畫出較精細的3D模型速度仍是十分緩慢,但是至少看起來是比第一次作業好上許多,也希望能照這樣的腳步,在未來能更有效率的做出理想的模型

2012年3月17日 星期六

作業一 元智一館

主題介紹:在對於openGL非常不熟悉的狀況下之一館

程式設計語寫作方法,執行結果呈現


大多都是利用GL_POLYGON的方式畫出方塊來呈現
在窗戶的部分有使用到GL_SMOOTH讓顏色有漸層的效果看似反光
在樓梯的部分雖然畫的不是很好
由於openGL並沒有畫圓形的參數
只能利用GL_POLYGON與sin cos的組合下畫出來
但是利用這方法卻比其他視窗成是中畫圓的function好用許多
因為這樣的組合可以畫出任意的橢圓形
但由於視窗大小為1500,800
所以若是原本的參數放入出來則是扁橢圓
因此還需稍稍修正

心得與討論:
在只學會了幾個畫圖的function後就要花一張圖實在是非常困難
尤其是每個多邊形都要自己輸入座標
假使要畫一張完整的圖並不是個好方法
所以只好用些for迴圈畫出一些有規律的線條
但除此之外給我的感覺像是用小畫家畫出一張圖
並沒有什麼方便的function去使用
尚未感受出openGL的威力