主要還是考慮到有機會和安然小朋友合作一個大程 ;-)
注意:
本文盡量避免理論化的描述,試圖用最通俗的語言介紹一下計算機圖形學的學習,以及一些參考書目和網絡資源;
本文不涉及對概念的定義,以免陷入學術討論之中
本文是作者學習計算機圖形學的體會,如果有不同的意見,請不要攻擊和漫罵
本文合適的題目應當是:白話說學計算機圖形學?
1.?引言
什么是計算機圖形學??本文盡量避免給它做嚴格的定義,但是通常來說,計算機圖形學是數字圖象處理的逆過程,這只是一個不確切的定義,后面我們會看到,實際上,計算機圖形學、數字圖象處理和計算機視覺在很多地方的區別不是非常清晰的,很多概念是相通的。
計算機圖形學是用計算機來畫東西的學科,數字圖象處理是把外界獲得的圖象用計算機進行處理的學科。在法國,圖形圖象是一門課程。
如何學習計算機圖形學呢?除了計算機圖形學的基礎知識以外,你還需要有以下的知識,你懂的越多,當然做的越好。
*?英語,?你一定要把英語學好,如果你想學習計算機圖形學的話,盡量看英文的書籍和資料
*?數學,?計算機圖形學里面的數學用的比較多,,我們可以列舉一些常用的:
高等數學,數值分析,微分幾何,拓撲,概率,?插值理論,(偏)微分方程…
*?物理,?如果你要進行基于物理的建模,一些物理理論是要學習的:
力學(運動學,動力學,流體力學…),光學,有限元…
*?編程語言:?C或C++是計算機圖形學最通用的‘普通話’,
*?數據結構:?你需要數據結構來描述你的圖形對象,除了通用的鏈表、樹等數據結構外,圖形學還有自己特殊的數據結構
*?其他類別:?有的時候你需要其他學科的知識,根據你的需要去學習吧
上面列舉的不是你必須學習的東西,而是計算機圖形學可能會用到的東西,一定要記住,不要指望通過一本教材就學會計算機圖形學,它比你想象的要復雜的多。
2.?圖形學的問題
每個學科都有自己學科的特定問題,圖形學要解決的是如何畫出圖來,得到需要的效果,當然這是圖形學最大的一個問題。
在開始學習計算機圖形學的時候,找一本簡單的書看,對計算機圖形學有個大概的認識,你就可以開始圖形學之旅了:
OpenGL?Programming?Guide:?The?Official?Guide?to?Learning?OpenGL,?Version?1.4,?Fourth?Edition
OpenGL?SuperBible?(3rd?Edition)?
是比較好的學習計算機圖形學的入門教材,在練中去學,一開始就去啃
Foley的
Computer?Graphics:?Principles?and?Practice,?Second?Edition?in?C?
不是好主意,會看的一頭霧水,一本什么都講的書的結果往往是什么都沒講清楚。
當你把OpenGL的基本內容掌握之后,你對圖形學就有了大概的了解了
那么下面你可以來學習一下計算機圖形學的數據結構和算法,下面的書比較適合
Joseph?O'Rourke?的Computational?Geometry?in?C,書里面有C的源代碼,講述簡單,清晰,適合程序員學習
總的來說,計算機圖形學涉及到2大部分:建模和渲染
2.1建模
你想畫一個東西,首先要有它的幾何模型,那么這個幾何模型從什么地方來呢?下面的書很不錯的:
Gerald?Farin?的Curves?and?Surfaces?for?CAGD:?A?Practical?Guide
這本書就有一點的難度了,呵呵,要努力看啊
這本書算是CAGD?(計算機輔助幾何設計)的經典圖書,CAGD方面的全貌,還有2本很好的講述曲面的書Bezier和Nurbs的書
Les?A.?Piegl,?Wayne?Tiller?的The?Nurbs?Book?
書里面有NURBS曲線、曲面的程序偽代碼,很容易改成C的,書講的通俗、易懂,但是你要有耐心看的:)
曲線與曲面的數學
這本書是法國人寫的中文翻譯版,里面還有Bezie本人寫的序J,翻譯的很不錯的,看了你就掌握Bezier曲面技術了
//另外一些你想知道的事情:其他的造型方式-開始
注意:在后面會有這樣的章節,標明
//另外一些你想知道的事情:其他的造型方式-開始
//另外一些你想知道的事情:其他的造型方式-結束
里面是我認為的一些高級話題,跳過他們不影響你學習計算機圖形學,但是要學好就要注意了,呵呵
還有其他的一些造型技術,比如:
隱式曲面(Implicit?Surface)的造型:
就是用函數形式為F(?x?,y?,z?)?=?0的曲面進行造型,這樣的造型技術適合描述動物器官一樣的肉乎乎的東西,有2本書推薦大家
Jules?Bloomenthal編輯的Introduction?to?Implicit?Surfaces,是一本專著,講述了Implicit?Surface建模型(Modeling),面片化(Polygonization),渲染(Rendering)的問題
Luiz?Velho?的?Implicit?Objects?Computer?Graphics?也是一本專著,講述個更新的一些進展
細分曲面(Subdivision?Surface)造型
當用NURBS做造型的時候,曲面拼接是復雜的問題,在動畫的時候,可能產生撕裂或者褶皺,Subdivision?Surface用來解決這個問題
Joe?Warren的Subdivision?Methods?for?Geometric?Design:?A?Constructive?Approach就是這方面的專著
從實際物體中得到造型,現在的技術可以用三維掃描儀得到物體表面的點,然后根據這些點把物體的表面計算出來,稱為重建(Reconstruction),因為這些技術之在文章中論述,所以我們省略對它的描述
//另外一些你想知道的事情:其他的造型方式-結束
下面還是一個高級話題:)
//另外一些你想知道的事情:光有造型是不夠的!-開始
在你的幾何模型做好之后,有一些問題需要對這個模型進一步處理,得到適合的模型,當面片很多的時候,或者模型很復雜的時候,需要對幾何模型進行簡化,才可以滿足一些實時繪制的需要,這個技術叫做層次細節(LOD-Level?of?Detail)。下面的書就是講這個的:
David?Luebke編著的?Level?of?Detail?for?3D?Graphics
//另外一些你想知道的事情:光有造型是不夠的!-結束
2.2渲染
有了模型,怎么把這個幾何模型畫出來呢?這個步驟就是渲染啦
如果你看了上面的OpenGL的書,那么你就知道一些渲染的知識了,但是別高興的太早,OpenGL使用的是局部光照模型(Local?Illumination?Model),不要被這個詞嚇住了
Local?illumination?Model指的是在做渲染的時候只考慮光源和物體之間的相互作用,不考慮物體和物體之間的影響,所以OpenGL不支持陰影,一個(半)透明物體的效果..,這些需要考慮物體之間的影響才可以實現。
//另外一些你想知道的事情:OpenGL可以實現陰影-開始
OpenGL本身不支持,但是通過一些方法可以實現的:),用Google搜索一下
Shadow?Volume,?OpenGL就找到答案啦
//另外一些你想知道的事情:OpenGL可以實現陰影-結束
Global?Illumination?Model?這類模型考慮的就比較全啦?,F在關于Global?Illumination的技術有3大類,具體的技術就不在這里介紹了,如果想了解,可以聯系我,大家一起討論:
光線追蹤(Ray?Tracing)
關于Ray?Tracing的好書有2本:
Andrew?Glassner?的An?Introduction?to?Ray?tracing?
Glasser是圖形界的名人,這本書也是Ray?Tracing的經典
R.?Keith?Morley,?Peter?Shirley?的Realistic?Ray?Tracing,?Second?Edition
這本書第一版是偽代碼,第二版是C代碼。它的結構不是很清楚,虎頭蛇尾的感覺。
輻射度(Radiosity)
關于Radiosity的好書有4本:
Michael?Cohen?的Radiosity?and?Realistic?Image?Synthesis?,?Cohen獲得SIGGRAPH?1998計算機圖形學成就獎,他把Radiosity變成實際可用,現在Cohen在MSR圖形

Francois?X.?Sillion的Radiosity?and?Global?Illumination?,?Sillion是法國人,他的主要研究方向是Radiosity,這本書寫的很不錯的,非常清晰
Philip?Dutre?的新書Advanced?Global?Illumination?,看起來還不錯,剛拿到手,還沒看,呵呵,所以不好評價
Ian?Ashdown的Radiosity:?A?Programmer's?Perspective?
有源代碼的書啊!!?就憑這個,得給5*****
Photon?mapping
這個我也不知道怎么翻譯,呵呵。這個技術出現的比較晚,一本好書!
Henrik?Wann?Jensen的Realistic?Image?Synthesis?Using?Photon?Mapping
Henrik?Wann?Jensen是Photon?mapping技術的發明者
3.3這些也是圖形學嗎??圖形和圖象的區別模糊了:(
除了上面講的‘經典’的計算機圖形學,還有下面的一些東西,它們也叫計算機圖形學嗎?是的?。?!
3.3.1非真實性圖形學(Non-Photorealistic?Graphics)
真實性不是計算機圖形學的唯一要求,比如:你給我畫一個卡通效果的圖出來,或者我要用計算機畫水彩畫怎么辦?或者:把圖象用文字拼出來怎么做?,解決這些問題要用到非真實性圖形學,?好書繼續推薦?。。?
Bruce?Gooch,?Amy?Ashurst?Gooch的?Non-Photorealistic?Rendering?
3.3.2體圖形學(Volume?Graphics)
用CT機做很多切片(比如頭骨),那么能通過這些切片得到3D的頭骨嗎?Volume?Graphics就是解決這樣的問題的
Min?Chen?編著的Volume?Graphics?
上面的2個圖形學技術就和圖象的界限不明顯了,實際上他們是圖形圖象的綜合
4?.還有其他的書嗎?
還有一些好書啊,呵呵,好書看不完的:),繼續放送:
Graphics?Gems?I?~?V,一大幫子人寫的書,包括研究人員,程序員…
有計算機圖形學的各種數據結構,編程技巧
Tomas?Akenine-Moller?等人編著的Real-Time?Rendering?(2nd?Edition)?
許多最新的計算機圖形學進展
David?Ebert等人的Texturing?&?Modeling:?A?Procedural?Approach,?Third?Edition?
講述如何通過程序實現紋理、山、地形等圖形學要素
F.?Kenton?Musgrave號稱分形狂(Fractal?Mania)
Ken?Perlin就是Perlin噪聲的發明者,用過3d軟件的人對Perlin?Noise不會陌生的
關于圖形學的特定對象,有特定的專題圖書,
Evan?Pipho?Focus?On?3D?Models,對于圖形學的常用模型格式,進行了講解
Trent?Polack的?Focus?On?3D?Terrain?Programming?,講地形的
Donald?H.?House?的Cloth?Modeling?and?Animation?,講布料的
Nik?Lever的Real-time?3D?Character?Animation?with?Visual?C++?,講角色動畫的
……
還有:)
Richard?Parent的?Computer?Animation:?Algorithms?and?Techniques,當然是講動畫的啦,呵呵。
David?H.?Eberly的3D?Game?Engine?Design?:?A?Practical?Approach?to?Real-Time?Computer?Graphics?,有代碼的??!呵呵:)
最后,沒事情的時候,看看下面的書吧
Alan?H.?Watt,?3D?Computer?Graphics?(3rd?Edition)?
James?D.?Foley等人的?Computer?Graphics:?Principles?and?Practice?in?C?(2nd?Edition)?,這本圣經沒事的時候再看吧,呵呵
累了:(?不說了,上面的書差不多了,還有一些shader的書,我不了解,以后會補上的:)
5.從哪里找到這些書???還有什么資源啊?
我保證,上面的書在www.amazon.com?都可以買到:)?別打我
那好,大部分的書在國家圖書館可以復印到,北京的兄弟有福啦,3年前的書借出來復印,1角/頁,但是新書要早圖書館里復印,5~6角/頁,還是比Amazon便宜啊,呵呵。
不行大家就到國外買,合買吧,還負擔的起。
我對DirectX不了解,所以沒有涉及關于DirectX的內容:)
posted @ 2008-02-21 15:46 ZelluX 閱讀(1974) | 評論 (3) | 編輯 收藏