2010年12月18日 星期六

CG Program4

建置上課教室 201 的 3D 空間場景

流程上是這樣的,先用 3D Max 將物件的位置、方向、大小等調整好,之後輸出成 XML 格式的資料。

程式分析 XML,就可以建立如編輯器 (3D Max) 中看到的場景,想要修改場景也很簡單,從編輯器修改後再次輸出成 XML 就好了。

場景中有很多相同的物件,像是椅子、桌子、電腦等,如果不將場景簡化會導致 FPS 低落。
簡化場景的幾個方法:
(1) 避免載入相同的物件浪費記憶體,讓相同物件都使用同個模型的資料來源;
(2) 避免使用過高精細度的模型,尤其是當物件很小的時候,例如:相當精美的滑鼠,物件太小只佔了幾個像素,卻佔用了很多的面數;
(3) 不畫看不到的東西,像是在視角後面的椅子,
     可以給每個物件一個代表它形狀的 Bounding Box,當 Bounding Box 和攝影機的 Frustum 交錯時才將其畫上。

2010年11月28日 星期日

CG Program3

這是個太陽系,各行星的資料是參考真實資料來設定的,當然有對部分的數據做修改,像是太陽的大小,現實中的太陽太大了,如果用相同的比例,其他行星會太小,不好觀察。

衛星方面只做了月球,其他行星的形狀皆不相同

,需要逐一建模太耗費時間,所以省略不做。

將行星軌道和貼圖弄好後,讓使用者可以切換目前觀看的星球。考慮到讓使用者自由在宇宙中翱翔,非常容易迷失方向,決定鎖住觀看的位置和視角,使用者只能決定觀看哪顆星球,而不能決定怎麼觀看。

目前這樣的畫面,太陽缺乏光芒的感覺、各行星缺乏陰影,整體的真實度不夠。

2010年10月24日 星期日

CG Program2


讀取模型檔案 (*.ply) 和 (*.mesh)

(*.ply ) 是以純文字儲存頂點的位置和頂點連結的順序,手邊沒有 (*.ply) 的匯出器,沒辦法添加額外的模型資訊(例如:normal、texture coordinate等)。

所以使用 Ogre 的 (*.mesh),(*.mesh) 是以二進位的方式儲存資料,每個資料群都有個 chunk ID 和 chunk Length,由 chunk ID 可以知道資料類型、資料形態;而 chunk Length 可以知道該讀多少資料,整體的讀取方式和 (*.ply) 類似。

此圖為添加了 texture coordinate 和 normal 資訊的模型檔案,
使用的是 OpenGL 預設點光源,增加的貼圖和法向量資訊能讓模型更加逼真。

2010年10月10日 星期日

CG Program1


The Moon Festival Picture (2010中秋節) 的圖像

在程式中放上柚子,製作流程如下:
1. 建模
用3D Max製作出柚子模型

2. 設定貼圖座標
將柚子的UV展開

3. 貼圖
用PS製作柚子的貼圖

最後再用程式讀進來,效果圖是使用內建的點光源。