2010年10月28日 星期四

CG Program 2 Loading & Display PLY Models



1. 心得:




這次的作業是load ply model然後show出來,我的作法是先把ply檔內的vertex數及face數讀出來,把每組vertex各以float的方式存入struct中,再用linked list把每組face以linked list連結起來並存進去。




而要把圖畫出來時則是用glVertex3f();從第一個面開始,把每個面所對應到的點連起來並一個面一個面畫出來。




而程式執行方式是先把ply讀進去structure中,然後讓使用者選畫出來的方式wire or solid,之後再照使用者選的模式畫出來。




至於操作方面可用: 1. 滑鼠轉動model, 2. Z/z調整正交, 3. R/r, F/f, V/v 轉動model 4. T/t, G/g, B/b 移動model位置。




2.執行結果:






2010年10月11日 星期一

CG Program 1 The Moon Festival Picture

The Moon Festival Picture﹝2010中秋節﹞的圖像
1. 心得:
這次我做的是中秋節的海景與天空,而星星和煙火的位置.數目.大小還有顏色都是由亂數產生的,所以每次所執行出來的結果都會不一樣;而海的顏色和波浪還有沙灘的樣子也有加入亂數,所以每次執行或調整視窗時,他執行出來的畫面也都會不一樣。
以下分享一下我的寫法:
(1) 星星:
首先先把一顆星星畫出來, 先用GL_TRIANGLES把星星的一個角畫出來, 再來加上glTranslatef和glRotatef把剩下的四個角也跟著畫出來, 最後再用GL_POLYGON把中間空的五邊形給畫出來, 這樣就完成了一個星星。最後再用loop包起來, 再把星星的位置取亂數並用glTranslatef來設定它的位置, 還有把顏色和個數也取亂數, 而大小則是利用glScalef來調整。
(2) 煙火:
煙火的畫法則是用glLineStipple和GL_LINE_STRIP先把一條虛線畫出來, 再利用glRotatef來讓這條虛線旋轉, 並把其他的線畫出來, 全部畫完之後就是一個煙火了, 最後在設定亂數的顏色以及位置, 再用loop包起來即完成。
(3) 海:
而海的部分則是用GL_POLYGON和畫圓的方法,將半圓畫出並調整圓弧面是向上還向下,並且將其圓弧的寬高都用隨機產生,使他有變化的感覺,再用loop把整個海面畫出來。
(4) 沙灘:
沙灘的畫法大致同上
(5) 月亮:
用GL_POLYGON和cos以及sin函數把圓畫出來, 並利用兩個顏色使其有漸成效果。
還有全部的圖形都有用glVertex3f將z座標分別標不同的位置, 並利用glEnable(GL_DEPTH_TEST)使用景深效果, 使畫面上的各個圖案 星星在最後面再來月亮->煙火->海洋->沙灘, 使其星星不會擋到月亮. 月亮不會擋到煙火... 以此類推。
2. 執行結果: