2011年1月10日 星期一

CG Program3

The solar system

1.心得

這次的題目是要做一個太陽系的系統,於是我就上網找了一些資料,就給我找
到了維基百科的這個網址http://zh.wikipedia.org/zh-tw/%E5%A4%AA%E9%98%B3%E7%B3%BB
於是我就利用這個網頁他最下面有一個"太陽與八大行星數據表",我把它複製下來並且存成txt檔,然後利用讀取這個表內個資訊來創造太陽系,我有用到的資訊包括赤道半徑.軌道半徑.軌道傾角.赤道傾角.公轉周期.自轉周期等這些資訊,然後大部分的資訊是以地球為標準,然後其他在按照他的比例來實行,當然有些數據也是有修改過,像太陽的半徑實在是太大了,如果按照實際的比例會使的其他行星幾乎小到看不見,於是就把它縮小了好多倍,然後這表上沒有冥王星的資料,於是我也上網收集了一些冥王星的資料加進去,但由於他實際與太陽的距離實在太遠,也是有經過修改過,而這次作業我也有運用到貼圖,但我覺得不難,比較難的不適是在rotate的運用,不僅貼圖時的紋理要靠rotate來調,還有行星的傾斜角度.自轉週期.公轉週期等等..這些rotate都會互相影響到,而且要想說要怎麼轉要轉多少角度,花了我不少的時間。

2.操作
w a s d r f :調整上下左右遠近
y h g j i k :調整觀看者從哪個地方觀看過去

3.執行結果

由左到右依序為: 太陽.水星. 金星.地球.火星.木星.土星.天王星.海王星還有冥王星在最右上角.由於距離遠體積又非常小所以請看圖4
如上圖,冥王星為右上角的一個白點
上圖為冥王星拉進觀看後
太陽
地球
木星
圈起來為九大行星

2011年1月7日 星期五

CG Program 5

CG Program 5

1.心得

這次的作業主要都花時間在找一些可用的模組

還有一些適合的材質,再來還有一些困難的點

就是要load模組進去所要縮放的大小以及要調

整的位置擺放還有方向,再來一個花很多時間

的就在於貼圖的部分,不但要把網路上下載下

來的途經過修改,做成適合自己用的圖,還要

去找出貼圖的相對位置,為了對到準確的位置

這個部分花了我非常久的一個時間,盡量希望

能夠做到最好,而我覺得比較滿意的部分是地

板的貼圖,還蠻華麗的感覺,以及我某台電腦

有放上螢幕畫面,裡面的圖花了我不少的時間

製作他的瀏覽視窗和內容,只希望教授與助教

能夠看得開心。

操作方法:
-移動: w a s d
-轉動: r f t g

2.執行結果











2011年1月1日 星期六

CG Program 4

1. 心得


這次主要是利用網路上的範例程式glm.cpp和glm.h

來輔助載入object的部分,而object由於小弟的3D

繪圖能力極差,所以只好上網找一些可以利用的

obj檔來使用,本來有找一些電腦的obj檔,但不知

為何載入了老半天就是沒辦法用,最後逼不得已

只好放棄,這次作業算是花比較多功夫在找網路上

適合的object來用,不用因為有glm.cpp檔,所以在

撰寫程式上也節省了不少的時間。


2. 執行結果:


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