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. 執行結果:





沒有留言:

張貼留言