1. 程式人生 > >Stay hungry,stay foolish!

Stay hungry,stay foolish!

做遊戲開發需要具備那些知識或技能?

這是我之前在csdn上發的一個貼的名字,今天忽然想起來進行了整理。希望看到關心這方面的人有所啟示。

下面是csdner的回覆:

freezezdj:

遊戲分客戶端和伺服器端。

hoya5121(老李):

與玩遊戲相比,寫遊戲要複雜上千萬倍,除了需要掌握通用的程式設計技巧以外,還要有相當的圖形學,物理,數學基礎,特別是在國內,由於相關資料的缺乏,更是讓初學者無從下手。下面總結了一些入門方法和比較容易入手的資料。

首先你要精通一門高階語言,比如C++或者C#,其次,要有良好的英文閱讀能力。對遊戲開發者來說英文閱讀能力是最重要也是最基本的工具之一,因為你遇到的大部分資源都將是英文的,不要總等著別人為你翻譯。慢慢嘗試著閱讀英文資料,你會發現其實也並沒有那麼難:)

剛開始,你要做的就是選擇一門圖形API,一般就是DirectX或者OpenGL之間選一個。如果考慮到跨平臺,那麼OGL是首選. 如果只在ms的平臺,則DX是首選。我對OGL並不是很瞭解,所以下面大部門資料都是和DX相關的。

當然,作為準備工作之一,你首先要到DirectX Develop Center下載最新版的DirectX SDK。

入門書籍非常重要,推薦<<Introduction to 3D Game Programming with DirectX 9.0>>(好像去年出了中文版)也就是傳說中的龍書,這可以說是最好的DX入門教材,Frank Luna從淺入深,討論了DX的方方面面。另外再配上<< Advanced 3D Game Programming With DirectX 9.0>>,書名雖然是advanced,但實際上沒有多少advanced級別的內容。看完這兩本書,你基本上已經對DirectX比較熟悉了。如果你希望學習XNA,也是一樣的,畢竟XNA是以DX為基礎。

不要一開始就看圖形學的書,這個時候你對圖形程式設計還沒有一個基本的感性認識,因此八成看的雲裡霧裡。不要以網上的教程和論壇提問作為主要學習途徑,找一本好書,系統學習,效率才最高。不要馬上看SDK裡的例子,很多圖形學的基本原理僅僅通過讀程式碼是不會明白的。某些年代太過久遠的書就不要看了,比如《windows遊戲程式設計大師技巧》(總看到有人在找這本書)。有人說基本的思想總是不變的,可惜對於現代GPU來說,很多早期的技術和優化技巧早就過時了。圖形程式設計是發展的非常快的技術,看看GPU的發展速度,1~2年就是一代產品的革新。

好了,入門之後,是你鞏固和拓展視野的階段。現在看計算機圖形學就比較合適了。吐血推薦<<Real-Time-Rendering>>,這本書算得上是所有圖形程式設計師的必讀書籍和參考手冊了。最近剛出了第三版(更新:已經有電子版了)。可惜國內只有第二版,稍微有點老,如果實在找不到第三版,還是值得一讀。國內其他所有以圖形學命名的書都有一個共同點:枯燥,過時。只需看看其中二維三維變換和曲線曲面表示的部分即可。如果這個時候發現你當年數學沒有學好,那麼有三本數學書是為遊戲程式設計師量身定製的:<<3D Math Primer for Graphics and Game Development>>, <<Mathematics for 3D Game Programming and Computer Graphics>>和<<Essential Mathematics Guide 2nd Edition>>,第一本書有中文版,最後一本則是08年才出的新書。

其實入門之後,就沒有固定的學習路線了,最好根據你感興趣的方向來學習。

Shader方面:《Cg_tutorial》和《The Complete Effect and HLSL Guide》都是不錯的入門材料,當然還有SDK文件。<<Shaders for Game Programmers and Artists>>有大量入門的例子。<<Advanced Lighting And Materials With Shaders>>詳細介紹了各種光照模型和技術。<<GPU Gems>> 1~3冊肯定是必讀的,雖然有1,2有中文版,但某些翻譯並不是很理想,強烈建議直接看英文版。ShaderX系列也是很經典的系列,每年出版一本,包含了最新的實時渲染技術,如今已經出了第6冊了。不過網路上只能找到1~3冊。1,2冊大部分shader都是用asm寫的,不過看懂原理,轉換為HLSL也並不難。另外Nvidia SDK和ATI SDK也是學習shader的重要資源。最後還有剛出的<< Programming Vertex, Geometry, and Pixel Shaders>>

地形:<<Real Time 3D Terrain Engines Using C++ And DX9>>非常全面的討論了關於地形渲染的各種技術,至少應該把第5~9章都瀏覽一遍。之後便可以 到virtual terrain查閱近期的地形渲染技術。

模型匯入和動畫:<<Advanced Animation with DirectX>>,僅此一本足以。

物理:<<Game Physics>>和<<Game Physics Engine Development>>都不錯。<<Real-time Collision Detection>>是碰撞檢測方面最好的書,可惜目前還沒有電子版。

LOD:<<Level of Detail for 3D Graphics>>

Ray tracing:<< Physical-Based Rendering - From Theory to Implementation>>

引擎設計:說實話,這方面還沒有特別好的書,大概越是核心的內容,越少有人願意寫吧。<<3D Game Engine Architecture Engineering Real-Time Applications with Wild Magic>>只有第三章值得一讀。<<3D Game Engine Programming>>可以選部分感興趣的章節看看,不過總的來說,講的比較淺。更新:<<3D Game Engine Design, Second Edition>>出了影印版本,強烈推薦。最近發現<<Pro OGRE 3D Programming>>也很不錯,200多頁短小精幹,但是可以讓讀者快速瞭解一個既有引擎的設計和構架。

AI:<<Programming Game AI by Example>>非常不錯,好像還有中文版,備選<<Artificial Intelligence for Games>>。當然<<AI Programming Wisdom>>系列也是必讀作品,不過目前網路上只有1~2冊。

網路:%##@%...(本人是網路白痴 +_+........)

綜合:<<Game Programming Gems>>系列,不過由於內容涉及的過於廣泛,文章質量參差不齊,選擇性閱讀就可以了。歷年GDC, Gamefest t,Siggraph等大型會議的paper也是應該關注的。

至於那些“All in one”或者n天較你寫出個FPS遊戲的書就不要讀了,這類書的通病是什麼都說了,結果什麼也沒說清楚。

除了書以外,再推薦一些不錯的網路資源:

除了大量教程以外,論壇裡多年累計下來的內容保羅永珍。好好利用論壇搜尋,你會發不管你多厲害,那裡總有一些比你強大的人在很久以前就遇到了和你同樣的問題,並且給出瞭解決方案。

Nvidia和ATI的開發者中心

creators.xna.com

XNA官方網站

與GameDev類似

這裡的除了討論軟體以外,還能看到對硬體構架的分析

最好的XNA教程網站

國內唯一比較專業的遊戲程式設計網站,可惜和GameDev相比就顯得太寒磣了-_-#

當然,不要忘了收集各大論壇裡牛人們的blog:)

最後,僅僅靠看書是不夠的,多寫多練才是王道。

ps:以上書籍,除了特別註明的以外,都是可以通過網路或者書店入手的。

我是網遊伺服器程式設計師,就會點C++,寫寫邏輯夠用了,其他伺服器程式設計師至少都懂得一下內容之一:
資料庫、網路程式設計、指令碼語言(目前常用的有Pathon、Lua)

客戶端程式也不像大家常說的那麼恐怖,因為真正開發底層圖形的人少之又少,可以說,
就算你會一些圖形學知識,想做都很難有機會。很多客戶端程式在寫UI相關的內容,
這種東西嚴重依賴於具體的系統,可能你會CEGUI,但面試的公司用ScaleForm。
但會一些圖形學方面的東西,比如:3D渲染流水線是怎麼回事、瞭解2D渲染的底層等等,
肯定可以在你入行的時候有一些加分。

還有些人是寫工具的,至少要懂MFC,也有的用C#,瞭解一些檔案格式,開發工具軟體,給美術人員、策劃人員、運營人員,以及其他程式設計師用。
你可能注意到我沒說“資料結構和演算法”,因為這是寫程式的基礎,應該是所有程式設計師都會的,
另外掌握一些常見的第三方庫(至於C++標準庫,算是C++的一部分,本來就該會的)也很有用
比如瞭解一點boost、一個網路中介軟體、資料庫API,都有些用處。

主要是計算機圖形學和演算法與資料結構

只要有紮實的計算機圖形學知識就可以了

多瞧瞧別人寫的原始碼,多看看計算機圖形學,也就差不多了

有想象力、創新。還有個好隊伍、好人品。

我是做遊戲客戶端的,別的不說,只要c++好了,其它就都好了

呵呵……國內做遊戲的大部分都是用現存的遊戲引擎,那裡需要了解那麼多東西。
關鍵還是一些常用的資料結構什麼的。比如一個基本的尋路系統啊什麼的。這個是要你程式設計師去做的。
碰撞檢測、複雜的圖形著色等都由引擎幫你處理了,你只要瞭解一下API即可,甚至對於一些好點的引擎,美工做完建模後馬上就可以通過引擎讓人物動起來。像一些比較好而且價格也相對便宜的遊戲引擎就是Unity,我也玩過一些,呵呵。當然,像高階的Unreal引擎價格不菲,但是確實非常強大。
zhangweiit:

我們公司就是做遊戲的
有分客戶端和服務端兩個方向
客戶端,建議學好vc ,directx(其實用opengl的比較少)
圖形學基礎是要有的,不然,學3D引擎吃力
一般3D引擎都會用現成的,一般是買國外的,或是公司早就有的,很少輪到自己做的
服務端,網路通訊,資料庫都要學。

呵呵,還是偶推薦一些讀物吧:
OpenGL Programming Guide
OpenGL Shading Language Programming Guide
如果樓主想開發iPhone等移動裝置的遊戲的話,看上面這兩本。
如果做國內網遊的話,呵呵,只要會資料結構就行了。沒花露水的。
qwidget

windows伺服器端的路過,tcp/ip,sockets,iocp,database,並行,資料結構,少量演算法。。。好像就行了。

如果是寫程式的:
資料結構,網路程式設計,影象技術.......
當然還有基本語言

得看你做什麼遊戲。2D or 3D,單擊 or 網路。
而且得看你是怎麼個狀態。單打獨鬥 or 團隊合作。
不同情況不同路線,不能單一而論。

原帖連結:http://topic.csdn.net/u/20100518/10/e276c183-5a81-444e-b538-badac493a521.html

ps:非常感謝各位的回覆!