求好的計算機圖形學入門教程,或書籍?

求好的計算機圖形學入門教程,或書籍


重新編輯一下,上次回答全是廢話T_t

======================================================================

「2015版最新小白零基礎圖形學入門親身實踐指南」

先說一下答主自己的情況:

目前大三在讀,大二學校開過基於OpenGL的計算機圖形學課程,當時由於迷戀Unity,Unreal的強大圖形功能而認為圖形學太基礎沒什麼用,就沒有好好學。等到學到Unity Shader編程的時候才開始傻眼了,於是乎開始從頭開始惡補圖形的知識。

經過幾個月的重新探索與學習,目前自認為已經入門,推薦的順序如下:

CG語言與GPU的概念 -&> WebGL- &> OpenGL ES For Android/iOS -&>OpenGL -&>DirectX

入門第一步:CG語言與GPU的概念

不了解硬體就去給硬體編程簡直就是在耍流氓。

看下這一本吧:

《GPU 編程與CG 語言之陽春白雪下里巴人》

這本書講解非常通俗易懂,還介紹了CG語言的語法,有助於今後的Shader學習。

雖然答主當時才看了前七章......

入門第二步:.WebGL

目前大部分院校開設的計算機圖形學很多是基於OpenGL或DirectX進行編程,很遺憾她們對新人都不是很友好,複雜的開發環境配置,笨重的依賴庫與Win32編程的門檻就耗掉了大部分新人的耐心。OpenGL與DirectX都很強大,但是卻令一部分人(比如我)不知道如何去學習與進階。有些新人(比如我)往往聽從知識層次很高的大牛的推薦,買了OpenGL紅寶書,藍寶書,橙寶書,紅龍書,卻看的一頭霧水,舉步維艱。竊以為,知識層次太過初級,這些含金量很高的圖形學權威著作有可能反而成了學習的絆腳石。

這時候就需要從一小部分,核心開始進行學習,於是我們可以考慮學習OpenGL的子集OpenGL ES(ES是英文嵌入式系統的縮寫,智能手機的圖形API大部分都是OpenGL ES 2.0+),OpenGL ES相對OpenGL精簡了許多,淘汰了很多陳舊的API。但是OpenGL ES程序的編寫一般是嵌入到Android或iOS應用中,開發環境,App開發的相關知識又成為了一個新的門檻。

好消息就是,OpenGL ES也有一個功能更為精簡的子集——WebGL,WebGL又是什麼呢?顯然是應用在Web,即瀏覽器內的圖形API,瀏覽器大部分跨平台,基於OpenGL ES 2.0的WebGL也是跨平台的。首先在功能上,WebGL具有完整的一套功能體系;而對於學習來說,更為重要的是WebGL內嵌到javaScript腳本中,開發環境只需要支持支持WebGL的瀏覽器(FireFox,Chrome,IE11等最新瀏覽器均支持),與記事本即可(當然,有JavaScript開發IDE更好,推薦Sublime Text2,免費無限期試用)。WebGL的其他特性這裡不再多說,推薦的教材如下:

1.《WebGL編程指南》

2.《WebGL高級編程》

新人(比如我)學習完第一本大概需要2-3周時間,可以在不參考API手冊地情況下輕鬆寫出如下效果圖,並對圖形學的基礎概念有了一個較為初步的理解。

點光源光照下的帶紋理逐片元計算光照的立方體

(紋理為答主QQ頭像,請忽視)

第二本答主還沒有開始看,粗略掃了一遍覺得是對第一本書的鞏固。

學完了這個可以轉去學習OpenGL ES,也可以深入探究一些著名的類庫,如Three.js。

這個階段為了了解圖形學底層,建議參考一些比較薄的計算機圖形學書籍,太厚的國外原版書籍對基礎薄弱的新人真心不適合,答主大一就買了幾本圖形學的著作,2年過去了,還是沒看多少,每次看的時候就犯困= =。

最近在圖書館裡淘到了一本比較好的——《計算機圖形學——基於3D圖形開發技術》

WebGL部分可以參考這個問題,很多業內大牛進行了回答:

WebGL 是否需要以 OpenGL 為學習基礎? - OpenGL

入門第三步:.OpenGL ES For Android/iOS

有了WebGL的基礎後,便可以繼續學習高級內容,入手OpenGL ES,根據自己的環境,可以選擇Android平台與iOS平台,推薦一下兩本書:

1.Android版《OpenGL ES應用開發實踐指南 Android卷》

2.iOS版《OpenGL ES應用開發實踐指南 Android卷》

3.OpenGL ES 2 0遊戲與圖形編程——適用於iOS 和 Android

答主學了WebGL第一本書後,開始入手Android卷,一周時間學完了前七章然後暫時擱置了,可以寫出一個如WebGL的那個效果圖。正是因為GL ES與WebGL絕大部分概念是相同的,這將大大提升學習速度。入門第三步,第四步:OpenGL -&>DirectX

很遺憾,答主目前並沒有走到這兩步,反而先學習了DirectX,當時直接抄代碼,雖然實現了DirectX的大部分效果,但是概念還是很模糊,等答主學完再來填坑吧。

如果大家已經到達了這一步,就應該知道如何深入學下去了吧!這時候,就可以改看英文原著與各種業界大神推薦的書了,定能飛速學習!敬請參考知乎的相關問題,進行高效有目的學習。

以上。


有兩個教程推薦:

1. NeHe Product - Everything OpenGL。學習圖形學的人肯定都知道NeHe教程,寫的非常詳細清楚,由淺入深。國內一些志願者翻譯過來的中文版本Nehe的OpenGL中文教程。

2. opengl-tutorial.org 這個教程也是很好,而且部分章節也有中文翻譯的。

個人推薦第二個教程,感覺比NeHe的要直觀一些,而且更符合圖形編程思路。

書的話,不是很推薦計算機圖形那些講理論演算法的書,覺得那些書看起來挺枯燥的。

有一本書,OpenGL Development Cookbook,這本書也是從基礎講起,而且從第一章開始就開始使用shader,然後到Offscreen Rendering和Environment Mapping,到後面涉及更高級好玩酷炫的東西,比如Shadow,Depth Peeling實現透明效果,Particle System等等。Cookbook簡直爽,全書有配套代碼,而且代碼寫得真是漂亮,所以自己在寫圖形的東西時,一直借鑒這本書的編程風格。

入門最關鍵的除了著手編程,還有最重要的是要明白渲染的過程也就是圖形管線。

我最初理解管線是查閱這兩個資料:

一個是 NVIDIA 的 The Cg Tutorial Charpter 1

還有一個就是Introduction to 3D Game Programming with Directx10 (最新版的是with Directx11),Introduction to 3D Game Programming with Directx10網上可以搜到中文譯本。

這兩個資料的對管線以及各個階段的介紹我覺得非常詳細。

圖形學涉及的內容很多,面很廣,如果題主想要在圖形學方面做研究,可以找一個自己感興趣的小的領域繼續鑽研。

圖形學的資料很多,以上提到的資料足夠入門。而且學習圖形學一定要多去寫代碼才可以。

另,上面提到的書的電子版或者代碼沒有在網上找到,可以私信我,我都有收藏。


題主問計算機圖形學入門教程,樓上推薦各種各樣的OpenGL,D3D,CG教程是什麼意思,問題標籤和描述里沒提到某個方向和某類技術吧?

難道默認認為:

( Graphics == Rendering-&>Real-time Rendering-&>Modern GPU-based Real Time Rendering )

難怪 @文刀秋二 Edward大神感慨知乎上Graphics話題區風氣各種不正...

正題:

首先,入門,即對Graphics有個大致的了解,從而選擇自己感興趣的方向,廣泛推薦的教材是:

Fundamentals of Computer Graphics, Third Edition (豆瓣)

然後,正三觀(理清思路),造輪子(多寫代碼)如果是Rendering:

實時:Real-Time Rendering, Third Edition (豆瓣) ,入門流行寫Software Rasterizer

離線:Physically Based Rendering, Second Edition (豆瓣) ,入門流行寫簡單的Raytracer

同時可以挑書里的reference和SIGGRAPH[Asia],EGSR,PG上感興趣的paper看

最後,Research or Engineering, that"s a question(dilemma~)


D3D的用紅龍那本書,即D3D遊戲開發編程基礎.

OpenGL的NEHE教程.

將這兩套教程中的代碼翻寫一遍,就算是入門了.

相信我,我就是這麼做的.見翻寫NEHE與紅龍的3D圖形程序 [開源]


我認為的最好的入門opengl的網站 Learn OpenGL, extensive tutorial resource for learning Modern OpenGL

其他的話就是有人提到的 Scratchapixel


計算機圖形真的是博大精深啊,特別是初學的時候,真是覺得要學的東西那是多的不一般啊。。醉醉噠~~我看英文還是比較吃力,所以我入門的時候大多看的都是中文書籍和教程~

一、想當年大三的時候,我們專業開設了計算機圖形學的課程,課程的教材就是下面這個:

《計算機圖形學實用教程》

這不是很高大上的書,內容主要包括基本圖形生成演算法,自由曲線和曲面,圖形變換與裁剪,實體幾何造型基礎,自然景物模擬與分形藝術,真實感圖形顯示,顏色科學基礎及其應用,計算機動畫、基於圖像的三維重建等。。。

看起來很多對不對!!但是描述太淺顯,並不能從這裡學習到實用的或者前沿的技術,放在這兒就是想追憶一下圖形學初體驗,表打我。不過如果想先對上述內容有個大概的了解倒是可以看看,當年其實沒怎麼好好學,然而後來教這門課的老師成為了我的導師。

二、學計算機圖形學3D數學神馬的是一定要好的,這方面的資料也很多,我看的是

《3D數學基礎:圖形與遊戲開發》

這本書的講解比較直白,容易懂~很適合初學者呢,如果遇到疑惑的就上網搜一下相關知識,肯定有一大堆大牛寫的博客來解答,效果杠杠的!

三、做計算機圖形學總要有個工具對不對~

如果做研究的話opengl和direct3d挑一個學吧,我主要學opengl,這裡推薦一個opengl的良心教程!!

OpenGL Step by Step

一步步的教會你怎麼用opengl,還包括空間坐標的轉換、光照系統、陰影、紋理貼圖、骨骼蒙皮動畫、SSAO等一系列常用演算法,源碼也可以從這個網站上下載哦。

除了上面的教程,還可以看看opengl紅寶書第八版,可以作為學習參考。

四、學習shader

現在已經是可編程渲染管線的天下啦,所以shader必須學!

GLSL:opengl里的shader語言,如果學這個就看opengl紅寶書和上邊那個教程即可,還可以看看《圖形著色器——理論與實踐》,這本書專門講GLSL的,裡邊有很多實例可以借鑒吶。

HLSL/CG:這倆貨基本上是一樣的,一個是D3D的,一個是NVIDIA的。話說這種著色器語言在unity3d里寫,真的很方便吶。

五、計算機圖形學較專業的書籍

上邊那些呢都是基礎和工具性質的,在學這些的過程中你肯定能對計算機圖形有初步的認識,接下來呢可以看看比較專業的書籍了。

如果你對著色器渲染感興趣呢,可以看看下面這兩本:

《GPU 編程與 CG 語言之陽春白雪下里巴人》

《GPU精粹》

如果你對計算機動畫感興趣呢,可以看下面這一本:

《計算機動畫演算法與技術》

但其實最好都看看,有時候會互相應用到。

六、我覺著如果你把上邊的所有東西都搞得差不多了,計算機圖形就入門啦,接下來就選擇一個你喜歡的課題森森地研究下去吧,看看相關論文,了解最新研究成果,實現相關演算法,終成一代大觸,咩哈哈哈哈哈!


Scratchapixel


http://www.zhihu.com/question/27544895/answer/37490453

好好看圖形學基礎,如矩陣變化,光柵化,zbuffer,光線模型之類,光線跟蹤,輻射度之類的。然後opengl,d3d,webgl,shader,及未來的各種相關技術手段都好理解。

然而大部分人都是急著學opnegl之類的,然後各種google,走很多彎路。


我只推薦Rendering的,其它方向我沒深入過。

實時渲染導論性質的書:Realtime Rendering,目前第三版,能很快了解實時渲染的各個方面。

離線渲染肯定就是PBRT,目前也是第三版,這書不多說,研究渲染的幾乎都會看。

還有全局光照的理論方面也有本不錯的,叫 高級全局光照,純理論的。

當然還有許多書,但是在我心中都比不上RTR和PBRT。

然後再次重申,學會OpenGL和D3D不等於入門渲染,更不等於入門圖形學。

然後實時和離線本質沒區別,都是在求解一個渲染方程式,但是個人更推薦先學習離線的,照我的說法離線更加王道,更加註重理論依據,對了解渲染幫助更大,實時么全是各種HACK,偏邪道,偏工程,當然這只是我個人看法。


我只在大一學過一點計算機圖形學,因為之前沒有什麼經驗,深感圖形學的坑有多深,也走了不少彎路,所以分享下我的經驗。首先你需要選擇一門語言,C++是最合適的,當初我就是因為選擇的是C(因為參加一個C語言程序設計比賽),所以在完成一些工作的時候不得不自己實現面向對象的思想,導致代碼結構異常混亂。然後,你需要選擇一種圖形處理庫,一般都在OpenGL和DirectX之間選擇,就架構而言DriectX確實比OpenGL高出不少,並且DirectX的API也比OpenGL好用很多,兼容性也更好,似乎除了跨平台,OpenGL和DirectX相比就沒有什麼優點了(關於OpenGL和DirectX的故事可以說上三天三夜,題主可以自己搜索)。不過當初我還是選擇的OpenGL,因為我比較偏執。但是OpenGL是真的坑啊,現在版本都是4點幾了,國內的教程都還是用的1點幾,那些API早就廢棄了。如果你真的要學OpenGL,還是先看&>和&>,記住一定要看最新版,雖然是英文版的,但是也很容易看懂。這兩本書看完了,相信你對計算機圖形學就有一個大概的認識了,知道在計算機中一個三維圖形的結構了。如果你對windows編程熟悉的話,已經可以做一個簡單的遊戲了。但是想要實現更加複雜的效果,你必須學會Shader,OpenGL的Shader語言是GLSL,可以看&>。然後你可以再去Google上找一些OpenGL的教程,比如Morden OpenGL,這些教程會教你怎樣把所學的知識運用起來。然後就可以學習一些圖形學的演算法,比如光照,陰影,地形生成,水面模擬,碰撞檢測之類的。這些演算法網上都有開源的代碼,也可以研究一些開源的遊戲引擎。這些演算法都很有意思,記得當初研究水面模擬的時候,作為一個學渣的我還特地去向學霸請教傅立葉變換。

因為我只在大一接觸過圖形學,大二後就走向了一個和圖形學一點關係都沒有的方向,所以對圖形學的了解也止步於此。不過以後有空了,我肯定還會繼續研究下去的,因為像輪子哥說的,這是一個程序員的浪漫。


我入門是看這兩本書(當然圖形學博大精深,本人現在也是入門水平)。。理論主要是computer graphics這本。。另一本是學習OpenGL。。

對於OpenGL來說網上也有多很好的學習資源:

http://www.opengl-tutorial.org/

http://www.learnopengl.com/ (有中文翻譯版)

http://ogldev.atspace.co.uk/


看了一下之前的幾位答主比較偏編程。但如果是research,實際擼起代碼來,有時候需要懂點數學原理。推薦點數學的。1)Daniel Cohen-Or等人寫的A sampler of Useful Computational Tools for Applied Geometry, Computer Graphics, and Image Processing;2)喬治亞理工的Greg Turk的Mathematics for Computer Graphics。前者很薄,證明少,但概念介紹得很清楚,適合入門。有點基礎之後再看後者列的書單,按自己興趣看吧。


只推薦一個網站。

Scratchapixel

Learn Computer Graphics Programming from Scratch

"Fantastic website! This is the best resource I"ve found on computer graphics programming. Thank you so much for making and maintaining it."


推薦閱讀:

你看過的書中印象最深的一句話是什麼?
可否推薦幾本提高閱讀能力和吸收能力的書籍或者方法?
最初接觸交互設計(主要是遊戲交互設計)應該閱讀哪些好的書籍?
推薦些國學入門書籍和資源?
同一本書不同的翻譯對閱讀的影響大嗎?

TAG:書籍 | 計算機 | 計算機科學 | 計算機圖形學 | 入門教程 |