Nehe OpenGL 教程是否過時?
Nehe 的 OpenGL 教程:http://nehe.gamedev.net/tutorial/lessons_01__05/22004/ 對新手來說非常友好,內容詳細。但是這套教程現在已經很老了。其內容是否已經不那麼適合現在來學習呢?如果是的話,現在應該看什麼?
目的的話:並非一定是做遊戲,只是想嘗試圖形編程而已。
如果只是想學互動實時圖形編程,或可參加Interactive 3D Graphics線上課程,它是以WebGL及Three.js為例子。此課程由《Real-Time Rendering, Third Edition (豆瓣)》的作者之一Eric Haines主理。不喜歡看視頻也可以看超過800頁的課堂筆記。
Lesson 1: Introduction
Lesson 2: Points, Vectors, and MeshesLesson 3: Colors and MaterialsLesson 4: TransformsLesson 5: MatricesLesson 6: LightsLesson 7: CamerasLesson 8: Textures and Reflections
Lesson 9: Shader ProgrammingLesson 10: Interaction and Animation
這裡cs291 video downloads可下載所有視頻、英文字幕及其他資料。
初學OpenGL最好的教程是Learn OpenGL, extensive tutorial resource for learning Modern OpenGL。
現在應該看的就是它。
-------------------------------------------------------
是這樣。項目需要快速入門OpenGL。
一開始選擇了《OpenGL超級寶典》第五版,初看很好嘛,代碼手把手教學。結果跟著敲了四章代碼,動手去實現項目,無從下手。遇到了個書中的問題,發現網上幾個外國人幾年前也在問,無答案。沒辦法,最後徒手強行解決了問題。這本書肯定不能要了。
然後改翻《OpenGL編程指南》第八版,結果這本書的定位是Handbook,更適合熟悉OpenGL之後當手冊來查。更沒辦法拿來初學了。
之後就遇到了Learn OpenGL,結構清晰,例子鮮明,行文簡練。十節課Getting started的知識,就可以拿來順利解決項目上遇到的問題了。總之非常非常棒。
感覺有數學基礎和計算機視覺基礎的話,3天吧。瀉藥。(處女瀉藥就這麼奉送了)
過時是肯定過時了。類似的問題我之前回答過學習opengl用哪個版本好?。畢竟,NEHE上介紹的那些個OpenGL API幾乎都被標記為deprecated了。作為聖經的藍寶書、紅寶書也都拋開固定管線,看門見山講programmable pipeline了。題主已經說明了自己的學習目的:只是嘗試圖形編程。那 @Milo Yip推薦的課程非常不錯。別的不說,至少你第一次畫出立方體之前不用大費周章地從各種奇怪的地方找來一堆莫名其妙的.h/.lib/.dll,然後把win32 api學到能看懂NEHE在幹什麼的地步,然後被「啥叫opengl擴展」,「為毛要搞擴展」,「像素格式啥玩意兒嘛」,「渲染上下文我去」這類東西打擊興趣。
題主說「NEHE對新手來說非常友好,內容詳細」,想必指的是人家是一步一步教你,逐行代碼解釋,完了還有源碼下載。這一點確實很贊。NEHE涵蓋的主題廣泛,有些原理至今仍然大有可鑒之處。NEHE的課程風格之缺點在於可能會讓你糾纏於一些細節,而忽視了原理。我看NEHE有些地方也沒有把原理講透徹,僅僅停留在解釋代碼,有的乾脆不明覺厲了。
誠然,fixed-function pipeline的學習曲線要比programmable pipeline平緩許多,這是因為前者基本屬於黑匣子。可編程管線則將管線敞開來,讓你不僅能看到內部的齒輪皮帶電路板,而且還能自己焊接上一兩個零件。你覺得哪一個能讓你學的更多呢?
私以為,目前仍然選擇學習固定管線API的合理原因只有兩個:1.工作中涉及的老代碼是用固定管線寫的,你得接著上。2.了解一段塵封往事,諳熟opengl發展歷程,見證歷代版本變遷,這樣第一次碰到VAO/VBO這類奇怪的生物時,你終於能由衷感慨「哎呀,我們好像在哪兒見過」。
最後。若想徹底弄清楚圖形管線,那最好的辦法是拋開GL/DX這些API,自己做一個軟體光柵化渲染器——變換、剔除、光照、光柵化、裁剪、紋理映射……——這一趟走下來,比學多少個GL/DX/Metal/Mantle都要來的實在。如果只是想學著玩的話隨便啦,NEHE 挺容易入門的。
如果是打算當以後的職業方向呢,也隨便啦,反正你會看各種 OpenGL 書籍的,多看點沒壞處。
個人認為已經過時了。但是課程思路有借鑒意義。
- 課程開始的環境設置可能會遇到阻力。隨著時間的推移,課程用到的一些實用庫在不斷升級,介面函數已經與教程描述的發生了不小改變。
- 課程前幾章使用立即模式來繪製三角形。這在現在已經不會再用了,現在使用的vertex/index buffer云云,和立即模式有不小的差別。
- 接下去的幾章對於紋理啊半透明的一些課程只是通過代碼把效果做對,對於對渲染api沒有基本了解的讀者來說會產生困擾。
- 您可以在您提供的鏈接里點擊HOME跳到首頁,課程也被標記為legacy。(新的課程沒有完成,但第一章的內容是渲染管線pipeline)
對於前兩個原因,主要是因為api升級,很多函數都被標記為 deprecated 。nehe的教程是固定管線的內容,主要通過調用介面函數設置一些參數進行渲染,現在都在用可編程管線渲染物體了。
對於後面的原因,這份課程更像是實驗室用的操作手冊之類的東西。為了讓你看到實驗結果,很詳細的介紹了很多操作細節,但幾乎沒有涉及到渲染管線相關的概念和知識。你照著實驗完後並不知道為什麼要這麼要這麼做,打開blend、設置texture filter什麼的。
雖然在多方努力下,opengl相關的文檔逐步補全,wiki相關的知識和教程也都在豐富。但畢竟某些方面還是缺乏合適的資料:好像opengl super bibel在第四還是第五版才開始一上來就講解可編程管線;wiki在敘述一些概念和一些注意事項時需要點開好幾層才能找到(我無意間發現的一些錯誤排查細節頁面,第二次找鏈接花了很久);一些功能是由某些廠商提供的拓展介面實現的,另一些廠商沒有,或者拓展的函數名稱不同,你要拿到這個介面就得花費不小的精力。基於以上提及的原因,不太推薦使用OpenGL作為入門。
相對來說 directx 在這些方面就比較有優勢。你可以嘗試以directx作為入門api。您可以嘗試直接學習可編程管線相關的知識和api的使用。DirectX 9.0就可以,現在國內的廠商仍然有在使用。下載安裝一個早期的DirectX SDK(最後一個獨立的安裝包應該是2010年6月的?)。查閱其中的文檔,現在也能在MSDN查到。
對於實踐來說,可以按照nehe教程的思路進行。
首先環境設置,這個可能得需要一些cpp的知識,這裡不方便敘述。主要是設置dx相關的*.lib/*.h的位置。百度吧!
接下來創建窗口,繪製三角形,可以查閱sdk的文檔 DirectX Documentation for C++。這裡頭也有相關教程,你可以照著一步一步來。只是dx9的那個tutorial不是可編程管線的內容,您可以先照著做一遍,然後再重新用可編程管線的辦法再做一次。- 你可以搜一搜網上的教程:搜索dx9 tutorial。如DirectXTutorial.com、Tutorial Index
- 或者你用dx10的教程
- 或者通過sample browser看看dx9可編程管線的demo,對照與自己代碼的異同。
完成以上步驟之後,您可以查閱sdk中另一個文檔 DirectX Graphic Documentation裡頭有講些相關管線知識,位置在其中的Direct3D 9 Graphic-&>Programming Guide for Direct3D 9-&>Getting Started (Direct3D 9)的子條目,比如architecture、transform、rendering內的內容,你會獲得很多有趣且實用的知識。
其中 architecture里的管線流程示意圖可以先強行記下來。至此nehe的lesson1-5就完成了,你對api的使用已經有了基本認識,因為是聊api的,就沒聊到圖形學到一些東西,那些內容您可以看看樓上幾個大神在別處的回答,其中有個文刀秋二的回答闡述了圖形渲染和api的一些關係(這個您應該自己能搜到)如果您只是對api感興趣的話,可以照著milo大神提供的課程或者買本教程學習。比如dx龍書(或opengl藍寶書)就可以補完了nehe教程的後35個lesson。
這時候您再使用opengl等api會更輕鬆,只需要通過wiki查到與dx概念對應的api,看看說明就能掌握使用了。
至於shader,可編程管線必須自己寫shader了,您可以再搜索別的問題找到自己的答案。
明確的說,現在回頭看一看nehe的教程對本人學習的幫助是微乎其微。
(自己當年著nehe把代碼全敲了一遍。也不懂什麼管線。聽說shader很火,嘗試學了cg shader,都快看完了也不知道到底渲染一個三角形要幾個shader。走了一大圈的彎路。。。偶然機會從dx重新學起才敲開了啟蒙的大門,按照自己的經歷多說了幾句,手機排版感人見諒,希望幫助到有緣人)謝邀。
就我個人而言,初學OpenGL的時候就聽說過nehe是很好的學習教材,但是其實自己沒看過,所以我也沒啥資格評判nehe過時與否。(當然你也可以理解為,不學nehe也能學圖形編程。)
我的學習經歷是:藍寶石(精讀+全編碼)-&>紅寶石(粗讀,發現字字珠璣)-&>橙寶書(原來shader還可以這麼寫)。
但是,現在回頭看我的這個過程,其實真心不算高效。問題就在於當初不會利用廣袤的互聯網資源。推薦這個問題下的答案學習 OpenGL 用哪個版本好?。謹記一點,學習OpenGL至少從GL 2.0新規範學起,shader才是核心,打個或許不那麼恰當的比喻,不寫shader的OpenGL就像不用指針的C程序。
最後,多敲代碼是學習語言的必備條件。
祝好。學那個了解下基本原理,然後把固定流水線改成shader就行
重思想,輕語法。可以從中學習CG成像原理,視點剪裁,opengl狀態機等等。
推薦閱讀:
※如何利用shader在文字上添加漸變陰影的效果?
※這款遊戲中 主角被遮擋部分變成半透明的效果是如何實現的?
※unity 最後一次drawcall 如何避免?
※在U3D等引擎當道的年代,我有沒有必要學opengl/dx或者osg???
※如何開始寫一個virtual globe軟體,類似於google earth那樣?