一個(gè)很好的學(xué)習(xí)途徑就是國(guó)外大學(xué)開(kāi)的CG的課程,standford,unc,unm,waterloo等等,等等, 一堆大學(xué),都可以下到課件,以及相關(guān)的論文,standford的“real time graphics architecture”可是kurt Akeley開(kāi)的哦。
另外就是source code,包括mesa,standford的glsim,還有人用c sharp做的csgl等,也不少。這些東西很值得細(xì)細(xì)研究,只是很花時(shí)間啊。
我也是才學(xué)這方面的,不過(guò)我覺(jué)得方法上面還是top-down的方法好些,對(duì)一些東西,有感性認(rèn)識(shí)了,再鉆下去會(huì)比較好。
【引言】
什么是計(jì)算機(jī)圖形學(xué)? 本文盡量避免給它做嚴(yán)格的定義,但是通常來(lái)說(shuō),計(jì)算機(jī)圖形學(xué)是數(shù)字圖象處理的逆過(guò)程,這只是一個(gè)不確切的定義,后面我們會(huì)看到,實(shí)際上,計(jì)算機(jī)圖形學(xué)、數(shù)字圖象處理和計(jì)算機(jī)視覺(jué)在很多地方的區(qū)別不是非常清晰的,很多概念是相通的。
計(jì)算機(jī)圖形學(xué)是用計(jì)算機(jī)來(lái)畫東西的學(xué)科,數(shù)字圖象處理是把外界獲得的圖象用計(jì)算機(jī)進(jìn)行處理的學(xué)科。在法國(guó),圖形圖象是一門課程。
如何學(xué)習(xí)計(jì)算機(jī)圖形學(xué)呢?除了計(jì)算機(jī)圖形學(xué)的基礎(chǔ)知識(shí)以外,你還需要有以下的知識(shí),你懂的越多,當(dāng)然做的越好。
* 英語(yǔ), 你一定要把英語(yǔ)學(xué)好,如果你想學(xué)習(xí)計(jì)算機(jī)圖形學(xué)的話,盡量看英文的書籍和資料
* 數(shù)學(xué), 計(jì)算機(jī)圖形學(xué)里面的數(shù)學(xué)用的比較多,,我們可以列舉一些常用的:
高等數(shù)學(xué),數(shù)值分析,微分幾何,拓?fù)洌怕剩?插值理論,(偏)微分方程…
* 物理, 如果你要進(jìn)行基于物理的建模,一些物理理論是要學(xué)習(xí)的:
力學(xué)(運(yùn)動(dòng)學(xué),動(dòng)力學(xué),流體力學(xué)…),光學(xué),有限元…
* 編程語(yǔ)言: C或C++是計(jì)算機(jī)圖形學(xué)最通用的‘普通話’,
* 數(shù)據(jù)結(jié)構(gòu): 你需要數(shù)據(jù)結(jié)構(gòu)來(lái)描述你的圖形對(duì)象,除了通用的鏈表、樹(shù)等數(shù)據(jù)結(jié)構(gòu)外,圖形學(xué)還有自己特殊的數(shù)據(jù)結(jié)構(gòu)
* 其他類別: 有的時(shí)候你需要其他學(xué)科的知識(shí),根據(jù)你的需要去學(xué)習(xí)吧
上面列舉的不是你必須學(xué)習(xí)的東西,而是計(jì)算機(jī)圖形學(xué)可能會(huì)用到的東西,一定要記住,不要指望通過(guò)一本教材就學(xué)會(huì)計(jì)算機(jī)圖形學(xué),它比你想象的要復(fù)雜的多。
【圖形學(xué)的問(wèn)題】
每個(gè)學(xué)科都有自己學(xué)科的特定問(wèn)題,圖形學(xué)要解決的是如何畫出圖來(lái),得到需要的效果,當(dāng)然這是圖形學(xué)最大的一個(gè)問(wèn)題。
在開(kāi)始學(xué)習(xí)計(jì)算機(jī)圖形學(xué)的時(shí)候,找一本簡(jiǎn)單的書看,對(duì)計(jì)算機(jī)圖形學(xué)有個(gè)大概的認(rèn)識(shí),你就可以開(kāi)始圖形學(xué)之旅了:
OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 1.4, Fourth Edition
OpenGL SuperBible (3rd Edition)
是比較好的學(xué)習(xí)計(jì)算機(jī)圖形學(xué)的入門教材,在練中去學(xué),一開(kāi)始就去啃Foley的
Computer Graphics: Principles and Practice, Second Edition in C
不是好主意,會(huì)看的一頭霧水,一本什么都講的書的結(jié)果往往是什么都沒(méi)講清楚。
當(dāng)你把OpenGL的基本內(nèi)容掌握之后,你對(duì)圖形學(xué)就有了大概的了解了。
那么下面你可以來(lái)學(xué)習(xí)一下計(jì)算機(jī)圖形學(xué)的數(shù)據(jù)結(jié)構(gòu)和算法,下面的書比較適合:
Joseph O'Rourke 的Computational Geometry in C,書里面有C的源代碼,講述簡(jiǎn)單,清晰,適合程序員學(xué)習(xí)。
總的來(lái)說(shuō),計(jì)算機(jī)圖形學(xué)涉及到2大部分:建模和渲染
(1) 建模
你想畫一個(gè)東西,首先要有它的幾何模型,那么這個(gè)幾何模型從什么地方來(lái)呢?下面的書很不錯(cuò)的:
Gerald Farin 的Curves and Surfaces for CAGD: A Practical Guide
這本書就有一點(diǎn)的難度了,呵呵,要努力看啊。這本書算是CAGD (計(jì)算機(jī)輔助幾何設(shè)計(jì))的經(jīng)典圖書,CAGD方面的全貌,還有2本很好的講述曲面的書B(niǎo)ezier和Nurbs的書
Les A. Piegl, Wayne Tiller 的The Nurbs Book
書里面有NURBS曲線、曲面的程序偽代碼,很容易改成C的,書講的通俗、易懂,但是你要有耐心看的:)
《曲線與曲面的數(shù)學(xué)》
這本書是法國(guó)人寫的中文翻譯版,里面還有Bezie本人寫的序J,翻譯的很不錯(cuò)的,看了你就掌握Bezier曲面技術(shù)了。
還有其他的一些造型技術(shù),比如:
隱式曲面(Implicit Surface)的造型:
就是用函數(shù)形式為F( x ,y ,z ) = 0的曲面進(jìn)行造型,這樣的造型技術(shù)適合描述動(dòng)物器官一樣的肉乎乎的東西,有2本書推薦大家:
Jules
Bloomenthal編輯的Introduction to Implicit Surfaces,是一本專著,講述了Implicit
Surface建模型(Modeling),面片化(Polygonization),渲染(Rendering)的問(wèn)題。
Luiz Velho 的 Implicit Objects Computer Graphics 也是一本專著,講述更新的一些進(jìn)展。
細(xì)分曲面(Subdivision Surface)造型
當(dāng)用NURBS做造型的時(shí)候,曲面拼接是復(fù)雜的問(wèn)題,在動(dòng)畫的時(shí)候,可能產(chǎn)生撕裂或者褶皺,Subdivision Surface用來(lái)解決這個(gè)問(wèn)題。
Joe Warren的Subdivision Methods for Geometric Design: A Constructive Approach就是這方面的專著。
從實(shí)際物體中得到造型,現(xiàn)在的技術(shù)可以用三維掃描儀得到物體表面的點(diǎn),然后根據(jù)這些點(diǎn)把物體的表面計(jì)算出來(lái),稱為重建(Reconstruction),因?yàn)檫@些技術(shù)之在文章中論述,所以我們省略對(duì)它的描述。
在你的幾何模型做好之后,有一些問(wèn)題需要對(duì)這個(gè)模型進(jìn)一步處理,得到適合的模型,當(dāng)面片很多的時(shí)候,或者模型很復(fù)雜的時(shí)候,需要對(duì)幾何模型進(jìn)行簡(jiǎn)化,才可以滿足一些實(shí)時(shí)繪制的需要,這個(gè)技術(shù)叫做層次細(xì)節(jié)(LOD-Level of Detail)。下面的書就是講這個(gè)的:
David Luebke編著的 Level of Detail for 3D Graphics
(2) 渲染
有了模型,怎么把這個(gè)幾何模型畫出來(lái)呢?這個(gè)步驟就是渲染。
如
果你看了上面的OpenGL的書,那么你就知道一些渲染的知識(shí)了,但是別高興的太早,OpenGL使用的是局部光照模型(Local
Illumination Model)。Local illumination
Model指的是在做渲染的時(shí)候只考慮光源和物體之間的相互作用,不考慮物體和物體之間的影響,所以O(shè)penGL不支持陰影,一個(gè)(半)透明物體的效果,
這些需要考慮物體之間的影響才可以實(shí)現(xiàn)。
(*OpenGL本身不支持,但是通過(guò)一些方法可以實(shí)現(xiàn)的,用Google搜索一下
Shadow Volume, OpenGL就找到答案。)
Global Illumination Model 這類模型考慮的就比較全。現(xiàn)在關(guān)于Global Illumination的技術(shù)有3大類,具體的技術(shù)就不在這里介紹了。
光線追蹤(Ray Tracing)
關(guān)于Ray Tracing的好書有2本:
Andrew Glassner 的An Introduction to Ray tracing
Glasser是圖形界的名人,這本書也是Ray Tracing的經(jīng)典
R. Keith Morley, Peter Shirley 的Realistic Ray Tracing, Second Edition
這本書第一版是偽代碼,第二版是C代碼。它的結(jié)構(gòu)不是很清楚,虎頭蛇尾的感覺(jué)。
輻射度(Radiosity)
關(guān)于Radiosity的好書有4本:
Michael Cohen 的Radiosity and Realistic Image Synthesis , Cohen獲得SIGGRAPH 1998計(jì)算機(jī)圖形學(xué)成就獎(jiǎng),他把Radiosity變成實(shí)際可用。
Francois X. Sillion的Radiosity and Global Illumination , Sillion是法國(guó)人,他的主要研究方向是Radiosity,這本書寫的很不錯(cuò)的,非常清晰。
Philip Dutre 的新書Advanced Global Illumination ,看起來(lái)還不錯(cuò),剛拿到手,還沒(méi)看,呵呵,所以不好評(píng)價(jià)。
Ian Ashdown的Radiosity: A Programmer's Perspective
有源代碼的書啊!
Photon mapping
這個(gè)我也不知道怎么翻譯,呵呵。這個(gè)技術(shù)出現(xiàn)的比較晚,一本好書!
Henrik Wann Jensen的Realistic Image Synthesis Using Photon Mapping
Henrik Wann Jensen是Photon mapping技術(shù)的發(fā)明者
【非真實(shí)性圖形學(xué)】(Non-Photorealistic Graphics)
真實(shí)性不是計(jì)算機(jī)圖形學(xué)的唯一要求,比如:你給我畫一個(gè)卡通效果的圖出來(lái),或者我要用計(jì)算機(jī)畫水彩畫怎么辦?或者:把圖象用文字拼出來(lái)怎么做?,解決這些問(wèn)題要用到非真實(shí)性圖形學(xué), 好書繼續(xù)推薦!
Bruce Gooch, Amy Ashurst Gooch的 Non-Photorealistic Rendering
【體圖形學(xué)】(Volume Graphics)
用CT機(jī)做很多切片(比如頭骨),那么能通過(guò)這些切片得到3D的頭骨嗎?Volume Graphics就是解決這樣的問(wèn)題的
Min Chen 編著的Volume Graphics
上面的2個(gè)圖形學(xué)技術(shù)就和圖象的界限不明顯了,實(shí)際上他們是圖形圖象的綜合。
【其他的書】
還有一些好書啊,呵呵,好書看不完的,繼續(xù)放送:
Graphics Gems I ~ V,一大幫子人寫的書,包括研究人員,程序員…有計(jì)算機(jī)圖形學(xué)的各種數(shù)據(jù)結(jié)構(gòu),編程技巧。
Tomas Akenine-Moller 等人編著的Real-Time Rendering (2nd Edition)
許多最新的計(jì)算機(jī)圖形學(xué)進(jìn)展。
David Ebert等人的Texturing & Modeling: A Procedural Approach, Third Edition
講述如何通過(guò)程序?qū)崿F(xiàn)紋理、山、地形等圖形學(xué)要素。
關(guān)于圖形學(xué)的特定對(duì)象,有特定的專題圖書,
Evan Pipho Focus On 3D Models,對(duì)于圖形學(xué)的常用模型格式,進(jìn)行了講解
Trent Polack的 Focus On 3D Terrain Programming ,講地形的
Donald H. House 的Cloth Modeling and Animation ,講布料的
Nik Lever的Real-time 3D Character Animation with Visual C++ ,講角色動(dòng)畫的
Richard Parent的 Computer Animation: Algorithms and Techniques,當(dāng)然是講動(dòng)畫的啦,呵呵。
David H. Eberly的3D Game Engine Design : A Practical Approach to Real-Time Computer Graphics ,有代碼的啊!呵呵:)
最后,沒(méi)事情的時(shí)候,看看下面的書吧
Alan H. Watt, 3D Computer Graphics (3rd Edition)
James D. Foley等人的 Computer Graphics: Principles and Practice in C (2nd Edition) ,這本圣經(jīng)沒(méi)事的時(shí)候再看吧,呵呵。
累了:( 不說(shuō)了,上面的書差不多了,還有一些shader的書,我不了解,以后會(huì)補(bǔ)上的:)
4. 資源
從哪里找到這些書啊?還有什么資源啊?
我保證,上面的書在www.amazon.com 都可以買到:) 別打我
那好,大部分的書在國(guó)家圖書館可以復(fù)印到,北京的兄弟有福啦,3年前的書借出來(lái)復(fù)印,1角/頁(yè),但是新書要早圖書館里復(fù)印,5~6角/頁(yè),還是比Amazon便宜啊,呵呵。
不行大家就到國(guó)外買,合買吧,還負(fù)擔(dān)的起。
我對(duì)DirectX不了解,所以沒(méi)有涉及關(guān)于DirectX的內(nèi)容:)