2010年8月3日 星期二

2010-08-04

花了10天把一學期計算機圖學課程內容看完+作業寫完,買了一本二手課本Interactive Computer Graphics 4/e(才300 XD)。真的是相當有趣,許多遊戲裡面要調的顯卡設定都有說是什麼意思,也有給實際的程式碼。個人卡最久的2個段落。

  1. 一般會覺得模型和Camera應該是Model和View 2個座標系,要繪圖的時候在去算從Camera看到是什麼樣子,DirectX也是這樣做的。不過OpenGL把模型和Camera的只用一個ModelView矩陣來表示相對關係,就很混亂…。
  2. Shader有點像是把一些運算丟到顯卡上去跑,現在的每個遊戲都有用到,而OpenGL也有支援,但是不是在最基本的函式庫裡面,要另外再去找。不過好像名稱有改過,第4版課本裡面教的函式,都不能用,第5版課本函式名稱有改過,但是好像又和函式庫有關,有的名稱有ARB有的沒有,亂七八糟。光是要把工作環境建起來就花了一個下午,所以要玩Shader還是玩DirectX的比較好。

前三個作業都是用OpenGL寫的,加上課本有許多範例,不是很難。後兩個作業是要自己模擬整個繪圖流程,各個部份的原理都不是很難,但是加在一起就很煩。

首先是決定怎麼存Pologon的資料,一開始存的資料結構沒想好,後來要再重改就會很煩。而且實際寫才發現課本的Perspective Projection Matrix竟然是錯的…

第4版課本寫的矩陣公式

-2far / (right – left ) 0 (right+left)/(right-left) 0
0 -2far / (top – bottom) (top+bottom)/(top-bottom) 0
0 0 -(far+near)/(far-near) 2far*near /(far-near)
0 0 -1 0

第5版課本寫的矩陣公式

-2near / (right – left ) 0 (right+left)/(right-left) 0
0 -2near / (top – bottom) (top+bottom)/(top-bottom) 0
0 0 -(far+near)/(far-near) 2far*near /(far-near)
0 0 -1 0

函式庫的矩陣公式

2 near / (right – left ) 0 (right+left)/(right-left) 0
0 2 near / (top – bottom) (top+bottom)/(top-bottom) 0
0 0 -(far+near)/(far-near) -2far*near /(far-near)
0 0 -1 0

靠…難怪我一開始怎麼寫結果都不對 …而且這個錯怎麼課本改版了還是改錯…是都沒有學生實際寫過嗎…

接下是畫直線的Bresenham演算法,我可以寫出在第一象限畫線的程式,但是要改成同一段程式碼可以360度都可以畫就不會改。最後還是靠wiki = =

接下來是算光線和顏色,因為Polygon模型的資訊都是存在頂點上,所以要算出edge和surface的z和顏色,通通都要用內插,相當煩。

最後寫了3天的作業5的結果:

Clipboard01

作業加分部份還有實作貼圖功能,不過懶得寫了 = =,計算機圖學到此結束,接下來朝高等計算機圖學邁進。

沒有留言: