零基礎如何學習計算機圖形學?

如題~鄙人是一名大二零基礎的學渣 雖然 在學校混了兩年 但至今感覺自己並沒有學到什麼 學校開了一門計算機圖形學的課 甚是感興趣 但是老師講的聽不太明白……各位大神有沒有什麼推薦的參考書呢?不想再繼續荒廢了 跪求各位大神⊙▽⊙


看一本peter Shirley寫的&<計算機圖形學&>。裡面對所需要的數學知識進行極簡短的入門,估計初中生都能看懂。偽代碼寫的非常精簡,基本上翻譯成c/c++就能看到效果。

讀完前幾章會教你做個光線追蹤,類似這種吧:

(這是99行代碼實現的 http://www.kevinbeason.com/smallpt/)

很有趣很酷炫。做完之後基本就入門了。


謝邀, 我博士的研究方向正好是計算機圖形學,希望我的解答能夠幫到你,也歡迎大家指出錯誤。

計算機圖形學分為很多個方向:圖像處理,動畫,渲染,幾何建模,三維重建等等(計算機視覺現在和計算機圖形學也有很多交叉)。

既然是零基礎學計算機圖形學,你可能需要閱讀大量的書籍並寫很多代碼。前期需要學習的知識主要包括數學,編程基礎和計算機圖形學基礎,後面根據你的職業規劃還需要額外閱讀其他細分的專業書籍或者寫更多的代碼 =。= 忘了說你要想跟上時代的腳步,還需要有良好的英文閱讀能力。

先從基礎書籍開始推薦(涉及到的英文教材可以去找中文教材的對應版本,根據經驗一般由機械工業出版社翻譯):

1. 數學類:微積分,線性代數(或矩陣論),向量微積分(Vector Calculus)或者多變數微積分(multivariable calculus)。其中請務必認真學習線性代數,因為圖形學裡大量應用矩陣和三維空間的知識。

2. 編程基礎類:C語言/C++入門教材;Hearn, Baker.Computer Graphics with OpenGL(這本書很厚適合當工具書);OpenGL(R) Programming Guide : The Official Guide to Learning OpenGL;DirectX 9.0 3D遊戲開發編程基礎(外號龍書)。圖形學界講究運行效率,所以大量程序使用C/C++開發,不論你是想進工業界還是搞科研,搞科研編程要求稍微低一些,有些方向只會matlab也可。OpenGL適合搞科研,而DirectX適合進工業界做遊戲。

3. 計算機圖形學基礎:Shirley. Fundamentals of Computer Graphics;3D Math Primer for Graphics and Game Development;Tomas Moeller, Eric Haines. Real-Time Rendering (2nd Edition)。這類基礎書籍推薦英文版教材,它們寫得都很詳細,使用大量例子來解釋各種概念和演算法,當然你需要知道英文專業名詞對應的中文翻譯。第一本最為簡單,第二本是圖形學和遊戲的一些數學基礎,第三本是第一本的深入,涉及圖形學的各個分支方向。

等你學習完基礎並且沒有喪失對計算機圖形學的興趣,那麼恭喜你可以進階了。你將面臨兩個選擇:做遊戲或者搞科研。

如果你非常喜歡做遊戲或者動畫特效,請參考該鏈接里的書籍:遊戲程序員養成計劃 (更新2013.3.19)。

如果你想讀博士搞科研,請參考以下書籍(重要性不分先後,需要根據你的個人興趣考慮選擇):

1. CUDA by Example: An Introduction to General-Purpose GPU Programming。CUDA編程入門教材,現在的圖形學領域越來越多的演算法會使用GPU加速,如果你也需要用到可以通過這本書快速入門開始寫GPU程序,但是GPU程序的優化是門很深的學問,需要在實際編程中慢慢學習。

2. Pharr and Humphreys. Physically-based Rendering。一本關於渲染的基礎教材,尤其是ray-tracing。圖形學中最難的部分就是渲染了,這本書寫得非常好,既詳細介紹了各種概念又通俗易懂,還附有大量的源代碼,這種書籍不可多得。

3. Dutre, Bekaert, Bala. Advanced Global Illumination。上一本書的補充教材。

=========================分割線==============================

之前學校放春假,而後又去開了個IEEE VR會議,一直沒有更新,現在來把實驗室庫存的幾本書籍名字更新一下。

1. Rick Parent, Computer Animation algorithms techniques, 2nd edition.

2. Erleben, Sporring, Henriksen and Dohlmann, Physics-based Animation.

3. GPU gems 1/2/3

4. 數學書:數學物理方法, Solid Mechanics.

5. 其他大部分書都在第一部分介紹了

另外,你還需要關注你感興趣的遊戲公司或者科研單位,看看他們招人的要求是什麼,然後有針對性的補充學習。

有其他感興趣的問題,歡迎補充。


為什麼大二了還零基礎?這才是最關鍵的。如果是你不努力,知道如何學也沒用。圖形學是各個分支里最需要編程能力和代碼積累的,不花時間和精力出不來。先解決這個吧。


第一步,打基礎。任何知識都是積累而成的,不可能只看一本書、一個教程就能掌握。

如果有某種途徑告訴你零基礎能學會,那麼該途徑不是在通過打基礎慢慢積累,就是在騙人。

拿出你的課本,看看讀者要求,一般會告訴你需要什麼準備知識。到對應領域去找最經典教材,繼續看看需要什麼準備知識。以此回溯,直到能看懂。

最起碼的,先要具備基本的線性代數、空間幾何和編程能力。


從數學到應用的路徑適合專業的,時間固定的使用。

自學的話還是從應用到數學吧。


這個基本是月經問題了。。

告訴你個捷徑。

1 找本圖形學理論的書,軟體實現光柵處理器,有空在寫個全局光照明繪製。然後opengl d3d shader 都是浮雲了。

2 看論文,gpu gems等高級主題。


按順序學習以下課程:

《高等數學》

《線性代數》

《概率論與數理統計》

《複變函數與積分變換》

《數值分析》

《信號與系統》

《C++程序設計語言》

《數據結構》

《演算法導論》

《傅里葉變換原理與應用》

《計算機圖形學》

《數字圖像處理》

《數字圖像與機器視覺》


目前也正在學圖形學的相關知識,就我的學習經歷來說一說吧。先學習一些基本的數學概念比如3維坐標,旋轉矩陣,投影等等,可以看《3D Math Primer for Graphics and Game Development》這本書比較淺顯易懂(後面你可以更深入的學習投影幾何,仿射幾何等數學知識),然後看Peter Shirley寫的那本《Fundamentals of Computer Graphics》,對圖形學的各個分支有個大致的概念,在看書的過程中學習一下OpenGL編程,看看早期的一些論文開拓思路,論文裡面的一些參看文獻可以去翻翻,大概就能了解圖形學需要哪些知識。然後再根據相應的分之繼續學習吧,實時渲染方面的《Real-Time Rendering》,離線渲染方面的《Physically Based Rendering》,還有Glassner寫的《Principles of Digital Image Synthesis》也可以翻翻,我覺得這本書挺有意思的,主要集中在principles上,渲染背後的一些物理,可以學到很多圖形學所需要的數學知識。動畫啊,建模啊什麼的就不熟悉了。。。SIGGRAPH的course notes也可以看看,或者感興趣的論文可以讀一讀,嘗試著實現一下。大致就這些了。


先強烈推薦physical based rendering. C++實現的渲染代碼, 通俗易懂,邊看邊自己實現一遍。加油!


你知道計算機圖形學已經比別人先跑了一大步了。


計算機圖形學主要包含四大部分的內容:建模(Modeling)、渲染(Rendering)、動畫(Animation)和人機交互(Human–computer Interaction, HCI)。

建模可以參考「數字幾何處理」

人機交互可以多看論文,包括在SIGGRAPH會議上,以及人機交互的頂級會議SIGCHI上,陸續出現了許多新興的人機交互技術及研究論文。


推薦閱讀:

現在1w-1w5的工作對程序員的要求是什麼?
CS 專業未來幾年的前景如何,你怎樣看待?
為什麼解壓縮文件時往往需要先解壓縮到系統盤裡的臨時文件夾下,然後再複製到目標文件夾?
跨專業考哈工大計算機研究生應該怎樣準備?
歷史上最有名的電腦密碼是什麼?

TAG:計算機 | 計算機圖形學 | 自學編程 |