花了10天把一學期計算機圖學課程內容看完+作業寫完,買了一本二手課本Interactive Computer Graphics 4/e(才300 XD)。真的是相當有趣,許多遊戲裡面要調的顯卡設定都有說是什麼意思,也有給實際的程式碼。個人卡最久的2個段落。
- 一般會覺得模型和Camera應該是Model和View 2個座標系,要繪圖的時候在去算從Camera看到是什麼樣子,DirectX也是這樣做的。不過OpenGL把模型和Camera的只用一個ModelView矩陣來表示相對關係,就很混亂…。
- 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的結果:
作業加分部份還有實作貼圖功能,不過懶得寫了 = =,計算機圖學到此結束,接下來朝高等計算機圖學邁進。
沒有留言:
張貼留言