遊戲編程之路-阿哲

此篇文章獻給那些爲了遊戲編程不怕困難的熱血青年,它的神祕要我永遠不間斷的去挑戰
自我,超越自我,這樣才能攀登到遊戲技術的最高峯   
        ——阿哲VS自己
 
 自序
 這篇文章我寫了大約4個月,前後修改很多次,做爲吉大的學生,畢業前給學弟,學妹,
留下的最後一個文章,也是我去年在《如果學好編程》中承諾過的。29887743 這個是我建
立的吉大遊戲編程羣,我準備解散,重新建立,希望真正熱愛遊戲編程的人進入,我會定
期清理這個羣.以後我工作了,我會盡最大努力,解答學弟學妹們關於遊戲編程方面的問題
。畢業前我會把我所有的遊戲編程書籍和代碼整理後發到燕子BT上(空間要留足夠大,估計
要5,6個G),到時候我會在羣裏通知大家。
 
 找工作這段時間是我這三年來最難熬的,我跑遍了中國的大多數遊戲公司,這段時間的辛
酸我就不說了,更多的時間是在等待,找過工作的人大多都能體會這是一種什麼樣的心情。
這個世界沒有完美的,地點和戶口,薪水和待遇,發展和興趣,或多或少都要放棄一些,
聽了很多人的分析後,放棄了地點上的考慮,只要人是活的,地點我相信不會是問題。
        這段時間遇見很多牛人,我才發現自己是多麼渺小,他們給了我很多建議,告訴
了我的不足,我學會了很多東西,這些都是很寶貴的財富。同時很多人給了我太多的幫助
,在這裏,阿哲感謝所有幫助過我的人,謝謝你們,沒有你們我辦不到的。
 
        我一共去了6個公司,騰訊,UBI,巨人,盛大,完美,金山,文章最後我會把這
6個公司各個方面情況介紹下,如果你以後想去遊戲公司,我想它們對你會有幫助的。
 在這感觸頗深的歲月裏,我總結出2句話:
 “大學生在學校裏是最猖狂的,其實你不知道,你是社會上就是最弱勢的”
 “多幫助別人,別人幫助你要學會報答人家,對於那些你幫助的人,連聲“謝謝”都不說
的,你沒有必要以後再幫助他”
 
 
 
 前言
 本人不才,姑且以自己經驗來談如何學遊戲編程,這個話題我醞釀了很久,它確實很難寫
,因爲我也不是資深高手,纔剛剛登堂入室,遊戲編程大師功力一般都十幾年左右,所以
讓我這樣的小卒寫的深入淺出更何談容易,錯誤出現並不奇怪,高手見笑也在所難免,請
大家指正,我會欣然笑納。但這幾年走過的路,讓我知道這麼學是正確的,大體過程經驗
告訴我,這樣做是對的,高手的指引告訴我,這樣做是對的。
 這篇文章主要討論如何學習遊戲圖形編程和遊戲引擎編程,告訴沒有接觸遊戲過編程或者
現在關於怎麼學好遊戲編程還迷惑的PEOPLE所要走的方向,完全拋開技術和代碼實現進行
談論。至於遊戲邏輯這幾年重點沒有發到這個上面上,很難總結。
 對於遊戲中的網絡,我個人認爲不算遊戲編程範疇,可能有人和我意見不一樣,只不過我
們把遊戲編程定義不同罷了,雖然現在遊戲離不開網絡,畢竟它只負責數據傳輸,和遊戲
內涵沒有任何關係(這裏的內涵指的我們可以看見和感受到的遊戲氛圍)
 經驗的限制,對於如何編寫一個好的引擎(至於“好”這個詞都是相對而言,能做的滿意
就是我所期望的),至今爲止我還沒有這個能力,但我相信經過我的努力,不久的將來,
我會實現這個願望,因爲我的一個願望就是實現一個好的引擎。
 
 我從下面幾個方面來說明如果學習,記住只是如何學習,要想學好就要靠你自己。
 1。 你真的喜歡遊戲編程嗎?
 2。 要了解遊戲編程
 3。 學會讀書,自學與思考,交流與合作
 4。 遊戲編程需要的基礎知識
 5。 2D遊戲編程
 6。 3D遊戲編程
 7。 遊戲引擎編程
 8。 我的遊戲編程生涯
 9。 遊戲編程相關書籍介紹
 10。淺談遊戲物理和AI
 11。各大遊戲公司招聘和一些招聘經驗
 
 一。遊戲編程,你真的愛她嗎?
 當你聽完我的介紹後,你就要決定遊戲編程是否適合你。
 遊戲編程可簡單可複雜,簡單的2D 《蛇吃豆》,複雜的現在流行的3D遊戲。咱們不說簡
單的,因爲你不想學習遊戲編程就爲了做一個簡單的遊戲。確實每個人對他所向往的東西
都想徹底瞭解清楚,可是我給你的第一個警告,複雜的3D遊戲,複雜到難以想象。

 1 你思想需要改變嗎?

 打開話題,遊戲是一個結合體,她是一個音樂,美術,技術,創意相結合的藝術品,你要
用藝術的眼光去欣賞的,因爲好的遊戲是用藝術的眼光來設計,除了某國的網遊不算外,
很多經典的遊戲流芳百世,成爲真正遊戲玩家佳話。
 中國的遊戲爲什麼這麼落後,你要聯想下,當年中國爲什麼會被八國聯軍所侵略。腐朽的
思想是根本原因,從而導致了腐朽的社會制度。遊戲行業也是這樣,看待遊戲的中國人,
始終帶着眼鏡,用腐朽思想看待遊戲,所以現在出現腐朽的遊戲行業,導致中國遊戲發展
緩慢,有人曾經說中國遊戲不久就趕超日本和美國,我認爲是扯淡,而且不是一般的扯淡
,具體原因後面我會詳細說明。
 從小的時候,國外的電子遊戲產品就跑進了我的空間,廢寢忘食的玩個沒玩,因爲耽誤學
習,從此電子遊戲被老師和家長全部封殺,任何事物都有利有弊,魯迅的《拿來主義》曾
說過“去其糟粕,取其精華”。在中國,電子遊戲被視爲過街老鼠。確實要承認電子遊戲
有負面影響,但這些負面影響是誰產生的,本質上是我們自己,最後本來是精華的東西從
我們身邊擦肩而過,從小霸王以後的國外遊戲機沒有任何仿造,導致了遊戲機技術從此斷
代,現在卻又想起來趕超。
 而現在,國人知道努力了,國家看到有錢可賺開始支持了,腐朽的遊戲思想卻還在蔓延,
網絡遊戲就是這樣環境下成長的新生兒,國內網絡遊戲每年要大批量生產,但存活的基本
沒幾個。不能否定,沒有利益的事情沒人幹,但你還不能否定,有些事情即使沒有利益,
但還是有人幹,哪怕知道自己並不能得到什麼。國內的人,很少是第2種人,他們把遊戲做
爲賺錢工具,垃圾遊戲隔三差五的紛紛涌出。相比來講,我只拿日本舉例子,雖然小日本
和咱們有愁,但我們不得不承認小日本在遊戲這方面思想層次完完全全超越我們,他們有
嚴格遊戲教育背景,他們做一款遊戲,要按照嚴格的流程,從設計到編程,以至最後的測
試,都有着幹一行敬一行的精神,否則《生化危機》這樣遊戲你是永遠看不到的。
 所以你要改變自己的思想,遊戲是一種藝術品,你要有一種藝術境界來去欣賞她。
 
 2 你有毅力愛她愛到底嗎?

 也許我上面的話,你還能接受,殘酷的在下面,以我的經驗告訴我,如果你編程和遊戲理
論起步是零,你要對遊戲編程達到略有小成的水平最少要4到5年,我比較蠢,花了6年。這
6年來,幾乎每天平均學習4-5個小時左右,當然假期都要算上。頭3年半基本學習計算機基
礎知識,包括數學,數據結構,計算機體系結構,人工智能,彙編,編譯原理,操作系統
,網絡,軟件工程,離散數學,算法分析。我們大學4年基本就學這東西,這些都是基礎,
遊戲編程都需要,還有一個就高等物理我沒有學,導致我現在對於一些物理微積分方程很
難理解,當然這裏並不一定是問題,只要你肯努力,沒有學不會的。完全把這些學好,花
4年時間真的不容易。我曾經抱怨自己沒保研而痛苦的經歷考研,現在我卻認爲是值得的,
我很難有時間在集中精力的複習這些專業課了,尤其是數學。
 在遊戲編程中,上面的基本知識都可以用到,所以我說遊戲編程很複雜一點不假。就拿遊
戲中最難的部分——一個好的遊戲引擎來說(這裏說的好引擎),世界上能把她做出來的
人很少,中國更是寥寥無幾。
 上面只是理論基礎,要走進遊戲編程最基本的。過硬的編程技能更是需要的,其實這些理
論學習可以和編程相結合,在編程中學習理論,爲了學習理論而增長編程經驗。
 有了基礎,你才能進一步學習遊戲編程,2D遊戲和3D遊戲理論都要學,這又要花費很長時
間,這個是我下面要詳細說的。
 看完我寫的,你可能心驚膽寒,所以你要愛她,深深的愛她,否則你承受痛苦的時候享受
不到暗含的樂趣。

 3 愛她請從遊戲開始。

 很多人可能不解,遊戲編程爲什麼要從遊戲開始,玩遊戲時,有很多潛移默化的東西影響
着我們編寫遊戲程序,很多靈感確實從遊戲中得來。一般的遊戲編程高手,都是從小由於
遊戲對他們巨大吸引,從而走上游戲道路,雖然不是絕對,但按統計學角度講可以說是一
個事實。一個不愛玩遊戲的人,愛上游戲編程的機率是很小的。其實很多人小的時候都愛
玩遊戲,他們都是從遊戲廳張大,只有一少部分,走向了遊戲開發這個行業,他們之間有
着明顯不同,走向遊戲開發的人,是真的被遊戲背後那種神祕東西所吸引,並想要揭開它
,而另一些人,則是完全迎合了遊戲開發的需要——玩的高興。
 我想說的是,一個遊戲編程高手,必定是一個遊戲玩家,他們都是從玩遊戲而愛上游戲,
從而走上游戲編程道路。這條路充滿了荊棘,不是一般人能走到最後的。所以你一定要愛
她!
 當然任何事情都不絕對的,你可能就是那不愛遊戲但愛遊戲編程(或者和遊戲性無關的那
部分編程)小概率的人。
 
 二。遊戲編程,你真的瞭解她嗎?

 遊戲編程,這個概念包含了很多深層次的東西。

 1.廣義上,我給的定義是,遊戲引擎開發和遊戲邏輯開發。

 遊戲邏輯開發是集中力量只開發遊戲中劇情部分,你只需要做的是什麼時候顯示什麼,什
麼時候放出什麼聲音,什麼時候通過網絡傳輸什麼數據,什麼時候這個物體或者人物做什
麼動作。至於底層怎麼顯示,聲音如何處理,網絡如何傳輸,物體動作怎麼實現的,你不
用關心,關心這些的是遊戲引擎。所以說遊戲引擎負責技術方面,而遊戲邏輯負責遊戲文
化內涵。
 成功的遊戲是以好的遊戲邏輯爲基礎的,而遊戲引擎並不是成功遊戲主要條件,但好的遊
戲配上好的遊戲引擎,確實會給人一種震撼,相比同樣的遊戲邏輯,好的遊戲引擎顯示效
果會給人一種全新視覺和聽覺感受。
 至於遊戲邏輯我不想過多解釋,但並不是說遊戲邏輯簡單,遊戲邏輯也可以複雜的要命,
這取決與遊戲複雜程度和遊戲引擎與這個遊戲的關聯程度。爲了解釋這句話,我不得不從
遊戲引擎解釋開始。
 早期的遊戲是沒有遊戲引擎這個概念,都是一個遊戲一套代碼,隨着遊戲越來越多,大家
發現開發有些遊戲中,有很多可重用的代碼,逐漸把這些重用代碼封狀起來,這就是早期
的引擎。對於引擎沒有明確的概念,只有好壞和適應程度之分,所謂的好壞,就是引擎支
持功能和顯示特性等是否strong,而適應程度是指一個引擎是否適合開發這個遊戲,開發這
個遊戲是否要自己再編寫一些額外的代碼。
 我舉個例子
 如果我用開發混鬥羅的引擎(假如它有引擎)來開發RPG,和開發RPG遊戲的“RPG遊戲開
發大師”相比,我們還要做很多工作,才能完成玩法功能一樣的遊戲。
 所以說很難有明確的界限劃分這一堆代碼是否是遊戲引擎,但遊戲引擎的任務是不用質疑
的,它的任務就是儘量不用負責底層處理,而專心到遊戲邏輯上來。
 
 2.從狹義上分,我只分解遊戲引擎部分,基本包括(1)遊戲圖形引擎(2)聲音引擎(3)網絡
引擎(4)腳本引擎(5)GUI(6)人工智能引擎(7)物理引擎。

 (6)(7)兩個不是必須的,而前5個是一個好的遊戲引擎要基本具備的,其實每個遊戲引擎
中都具備物理引擎,只不過很多遊戲對於物理要求不是很高,所以就集成到了圖形引擎中
或者遊戲邏輯中。
 圖形引擎是引擎中最難的,它基本要處理遊戲引擎中70-80%的工作量,它的主要任務是負
責圖形高效顯示,包括速度和精度。後面我會集中並詳細解釋。至於聲音和網絡引擎大家
通過字面就可以知道它幹什麼。本人對聲音處理和網絡傳輸知道甚少,說出來只能誤人子
弟。
 
 至於腳本我還略有研究,我想解釋下什麼是腳本,遊戲中爲什麼用腳本。腳本有時很難給
出一個定義,但大家都知道那些是腳本語言,我給出的解釋是用軟件CPU(虛擬CPU)來運行
的編程語言就是腳本語言,軟件CPU和所說硬件CPU是對立的,也就是說腳本運行與否先是
關聯到這個虛擬CPU,在虛擬CPU上運行,然後再又映射到真正CPU,來真正運行。這個過程
很抽象,我覺2個例子,第一個就是JAVA語言,它有一個虛擬機,這個虛擬機就是軟件CPU
。再舉一個例子,我現在要編寫這樣一個指令、
 PRINT S  這個指令表示打印S
 S代表一個萬能類型。
 爲了實現這個指令,你首先要有一個函數來負責處理打印
 比如是這樣的函數
 void print(S)
 {
    cout<<S;
 }
 這裏只是僞代碼,只是表示這個意思。
 你首先要找出PRINT這個單詞,讀入到一個buffer1,然後把參數讀入buffer2
 if(buffer1 == PRINT)
  print(buffer2);
 這裏段代碼其實就是一個軟件CPU,它負責虛擬運行PRINT S  這個指令。
 
 那麼遊戲中爲什麼要用腳本呢!最簡單解釋就是靈活性好。拿一個RPG遊戲例子來說,遊
戲中有大量物品,每個物品有大量的屬性,如果我把這些屬性值直接寫到遊戲中,每一個
小小的改變就要編譯整個遊戲,花費很多時間,靈活性很差。
 如果我把這些寫到一個文件中,用腳本語言來編輯,只需要編譯腳本文件就可以了,當然
如果你腳本是解釋型的語言,不用編譯直接可以運行。
 當然腳本還有很多好處,主要目的還是方便性和靈活性。
 其實GUI(圖形用戶接口)是一個重要部分。3D遊戲中,出現的是大量的3D模型,這些模型
是先用文件的形式存放好的,而文件裏面包括的是3D數據和這些數據的組織方式。
 至於數據怎麼組織是你引擎要規定好的,這樣也方便讀取,最後把3D數據加載到內存。現
在問題是3D數據上,我們怎麼能有效的得到這些3D模型的數據,手工寫進文本里?我靠,
那是奴隸社會,SB的做法。我想你不會這麼做。人類很聰明,這就是爲什麼人把其他動物
關進籠子裏,而不是其他動物把人關進籠子裏的原因。既然我們很聰明,就要想一個辦法
快速的定義3D數據,然後保存成文件。這樣一個3D編輯器就產生了。3D編輯器就是類似於
3DMAX那種,但引擎中的編輯器是有特殊目的的,使用者要按照引擎指定要求編輯3D數據,
這樣引擎高效的顯示和處理數據比較容易,至於3D數據是怎麼組織的,是一個設計上的問
題,由你引擎來決定,設計好壞,決定你引擎加載數據是否容易,關係到最後渲染。所以
一般好的遊戲引擎都有自己GUI,但你也可以用3DMAX這樣的軟件,然後讀3DMAX文件變成自
己可以利用的數據形式。
 說到這裏,不知道上面的概念大家是否理解,我想如果你沒接觸過引擎,可能真的不理解
。其實我很難用簡短的語言把這麼複雜的問題說清楚,如果有一天你把3D學的融會貫通,
你發現我說的是對的。我不知道大家是否發現一個共性的問題,有時你讀一本書,無論你
怎麼認真把它看完一遍,你都很難掌握裏面的知識,當你再認真看第二遍的時候,你突然
覺得這本書沒有第一次看那麼晦澀難懂。有些知識都是前後呼應的,它們之間相互聯繫,
要想完整的理解它們缺一不可。遊戲編程的知識也是這樣。我前面介紹的如果你看懂了,
那你perfect,如果你沒有看懂,也不要灰心,這裏介紹的只是一個大綱,讓你對遊戲編程
有一個瞭解,最基礎層面的瞭解。
 
 三。遊戲編程,你準備好了嗎?
 
 這個部分講解如果你想開始遊戲編程應該具備那些基礎知識,這樣你才能接下來遊戲編程
學習,當然下面的有些知識,我開始學習遊戲編程時,也不是都具備,但這些知識都是很
容易學的知識,如果你基礎好,在遊戲編程中隨時學就可以,不耽誤你學習遊戲編程的進
度。我在這段最後會指出那些是必須掌握的,因爲這些知識如果你在遊戲編程時學習再學
,時間上真的不允許。
 
 
 1。書,永遠是你的好朋友!
 書,是你瞭解她最直接途徑,當然我說的書還包括所有遊戲編程資料。書,有好有壞,想
要深刻了解她,你必須挑選精妙的好書,而且還有循序漸進的,合理次序的去讀它們。遊
戲編程書籍大量風起雲涌的出現是在2000年以後,當然2000以前也有,只是很少一部分,
從2000或者以前開始就研究3D遊戲的中國大哥們,現在可以說是現在中國遊戲行業的鼎樑
支柱。現在出版有關遊戲方面的書籍大約有200左右本,中國人自己原著的書幾乎沒有,大
多數都是翻譯國外的,就有幾本翻譯的質量很好(翻譯大哥大姐確實很辛苦,我承認這點
,但拜託你們翻譯前要看懂再翻譯,否則望文生義,不如讓我們自己看英文原版)要麼自
己寫的也是東挪西湊的,寫出來估計是想騙錢,誰叫中國人這麼老實,這麼好欺負了。其
中大部分書籍是3D遊戲的,3D遊戲確實要比2D遊戲難一個數量級別,如果你足夠聰明,其
實這些書看個幾十本,寫出一個在中國可以立足的3D引擎足夠了。但好象這樣聰明的人真
的很少,有黃金的這個地方大家都知道,可是前往這塊寶地的道路太荊棘,很少有人走下
來。
 書,大家從出生時就接觸,學會讀書,這四個字,很少有人能領會,你看一本書,要麼否
定,要麼肯定,如果你還是很迷糊,要麼是書寫的不好,要麼就是你知識水平層次有限,
要麼就是你根本沒學會讀書。我在這裏只說一句話“要讀好書,思而不學則罔,學而不思
則怠,溫故而知新”,我想高手很容易體會這句話。
 想要學好遊戲編程,學會讀書是你要掌握的,也是你獲取知識最快的途徑,開始時,建議
還是讀一些中文的遊戲編程書,因爲遊戲編程中充斥大量術語和名詞,沒有任何遊戲編程
概念的人,直接看英文,即使你是老外,我估計你看一會就會爬在書上,眼皮一關,口水
把它淹沒了。
 看書後,代碼一定要仔細讀,而且對於初學者一定要親自去實現,這樣你才能加深理解,
有時看書看不懂,一看代碼就全明白了。“紙上得來終覺淺,覺知此事必躬行”,我始終
堅信這句話,只有你經歷了,你才能感受,就象你沒有失去過,就不會知道珍惜是什麼東
西。
 我相信既然你都看到這裏了,就應該知道我上面爲什麼給你打好的警鐘。看完書,就要寫
代碼,最好不要一味的效仿,要有你自己的獨道之處,這樣才說明你認真考慮了這個問題
,你也真正瞭解了,這個問題是什麼,應該怎麼解決,怎麼解決最有效果。
 E文書,以後就要是你老婆(同性戀除外),天天都要見面,除非你離婚了,也就是遊戲
編程這個愛情你不想要了,你提前離開了這個努力走到最後才能見到美好果實的幸福家庭
。中文翻譯一般都很慢,中文翻譯出來,國外這個技術基本過時了,而且有能力翻譯的人
本來就少,有時間幹這事的說他有病,也不足爲奇,因爲翻譯一本太浪費時間了。所以要
適應去看E文,現在沒錢,就看電子的,很多國外新書,沒有電子的,但電子的夠我們初學
的人玩很長時間,等有錢了,就直接去買國外正中的洋版,然後弄到家中,天天啃,工作
時也啃,人家都會說你很有激情的。看電子的如果閒麻煩,就打印下來,打印下來還是花
不了幾個鋼幣的,和買一本中文差不多(大家不要哭窮,一本好書100元我認爲很值得,裏
面技術如果你掌握了,你想想,大把大把的票子就進你口袋裏,很多人買來不看,天天還
抱怨書貴。)
 這幾年來,我讀過很多遊戲編程方面的書,中文的基本都讀過了,現在我一直在讀E文書
,有時到覺得看中文有些不適應,還有好多好書,我還沒有讀。讀E文書時,如果沒讀懂,
自己一定要去網上查查相關資料,然後集中精力把它弄懂,現在很少有看不懂的E文遊戲編
程書(知道我6級沒過的,別用磚仍我),有些還是看不懂,確實自己水平有限,但不是因
爲英語問題,關於高深而複雜數學問題,即使翻譯成中文,我也很難看明白。
 我在後面會把所有好的遊戲編程書籍都列出來,告訴大家那些可以買到,那些只有電子的
。不好的書,我就不列出來了,只會浪費大家以後的時間。
 2。遊戲編程所需要的基礎知識
 
 我這裏介紹下要做一個好的,稱職的,遊戲程序員所需要。學習就和蓋樓一樣,要想上層
建築牢固,你就要有堅實的基礎,我這裏介紹的基礎是你從事遊戲編程最基礎,基礎的不
能再基礎的東西。
 2。1 數學
 數學是遊戲中支柱,沒有了它,任何都不要談,在你編寫你遊戲的時候,你就會知道,世
界抽象成一堆數學是多麼的神奇,突然你會覺得以前枯燥無味的數學現在是一頓大餐,但
這個是霸王餐。國外人寫關於引擎方面書的人,都可以說是數學高手,他們理論和實踐都
很厲害,讓我崇拜的不得了。大學裏是你學好數學的最好機會,一定要弄明白它的現實意
義,任何理論都不是憑空出來的,它一定有現實基礎,這個現實基礎,就可以幫助你很好
理解這個理論。
 2。1。1高等數學——微積分理論
 在遊戲引擎中,很多遊戲特效都是通過微積分方程來解得的,高度仿真是現在遊戲的追求
,真實感越強就需要越多的計算量。極限,一元微積分,多元微積分,級數,微分方程等
等在遊戲圖形圖象和物理上都有明顯體現。有時一個碩士或者一個博士爲了擬真一個效果
要花費幾個月或者幾年的時間,做爲一個遊戲程序員,微積分到達什麼層次我很難給出定
義,但起碼如果別人給出了原理我們能看明白,並把它實現,我覺得就很可貴了。
 2。1。2線性代數和空間解析幾何
 在大學課本中,空間解析幾何是放在高等數學書裏面講的,但遊戲中,它和線性代數放到
一起我認爲更加合適。線性代數所有知識都要掌握,在遊戲中它們比微積分體現的更淋漓
盡致,理解上我個人認爲相對微積分更容易。
 空間解析幾何主要講向量,平面,線,體,這些東西並通過線形代數矩陣進行空間變換,
最後達到遊戲想要的目標。
 2。1。3四元數
 這個在大學裏面不學數學的,估計很少有人接觸,它也是來用來變換空間,理解起來不是
那麼容易,但最常用的就是用四元數來表示旋轉。
 我這裏只是一概而過,上面任何知識在遊戲中都有應用,但大學裏的數學不是爲了遊戲而
開設的,所以和遊戲中用的數學在知識分列和講解上還是有很大差異,尤其是線性代數和
空間解析幾何,不用擔心,我在後面介紹給大家一些好的遊戲書籍,對大家學習遊戲編程
和有幫助的。
 2。2語言
 編寫遊戲c和c++是你首選,相對來講C++是你更應該掌握的。
 2。2。1 其他語言爲什麼不是當今流行的編寫遊戲程序語言?
 VB,JAVA,C#,等等其他語言,並不是說它們不能做遊戲,它們能做,由於語言本身設計
機理的限制,只能做一些對遊戲速度要求低的遊戲,對於運行速度要求高的遊戲,它們被
判成死刑。當然這個也取決於硬件的發展,以前8bit FC遊戲都用C語言和彙編來寫,現在
由於硬件速度提高,用VB,JAVA,C#來寫這些遊戲運行也是可以的,例如現在興起的WebG
ame(網頁遊戲)。但如果你真想做遊戲的話,你一定想要了解現在最流行遊戲編寫,C和C+
+是你最好的選擇,也是你走上真正的遊戲編程道路的重要武器。
 2。2。2 C和C++應該選擇那一個?
 C和C++,這裏面我還要說一說,我個人更看好C++。大家都知道C是面向過程的,而C++是
面向對象的,雖然C++的面向對象特性還不是很完善,但出於對大型軟件設計上的考慮,因
爲遊戲引擎是大的工程,框架設計遠遠要比編程重要,一般框架設計用面向對象方式更直
接,所以C++比C更有優越性性,而且如果你合理用好C++,並不見得C++比C速度慢。有時一
個軟件架構和軟件運行上問題,很難取捨,對於大應用程序來說,都是一點點犧牲速度來
獲得好的架構,是利大於弊的事情,這裏確實體現軟件工程的重要性質。
 2。3。3 彙編,很重要嗎?
 彙編語言也是你要掌握的,你說你語言學的好,但卻不會彙編,是一個天大的笑話。現在
很少有彙編高手能寫出比編譯器優化出來的彙編代碼運行效率要高,因爲語言的不同,思
考問題的方式就會有不同,就象最早紙帶機上的原語言一樣(可計算性與計算複雜性就講
這東西)。如果遊戲都用匯編來寫,寫代碼效率很低,所以我們都用高級語言來寫,同時
還要與底層有密切聯繫的,C和C++擔任大部分工作量。對於遊戲速度頻頸問題,有時我們
用C和C++即使優化很多,代碼精簡很多,算法也改良很多,但由於語言本身設計上問題,
和高效彙編來編寫還是有不同的,這時就要是彙編高手來做速度最快,內存和寄存器使用
最少彙編程序。所以彙編還是很重要的。
 2。3。4 其他CPU硬件指令
 這裏只是說 INTER 和 AMD CPU 都支持的指令集,也是最常用指令集。
 MMX和SSE SSE2是遊戲編程中最常用的指令集,這個指令集是 SIMD(single instructio
n multiple data),也就是單指令多數據流指令集,一個指令可以處理多個數據流運算。
彙編CPU指令,一個指令只能執行一個數據流運算。
 例如:
   彙編中
  ADD EAX,EBX
  這是一個加法指令,EAX,EBX是寄存器,是32位的。這個指令就是 EAX = EAX + EBX。
這個過程只有一個數據流相加。
  而SIMD思想是,如果現在有2個指令
  ADD EAX,EBX  
  ADD ECX,EDX 
  能不能讓他們一起執行?所以SIMD 指令提供這樣的功能,他用很大的寄存器,前一部分
裝EAX值,後一部分裝ECX值,再用一個寄存器,前一部分裝EBX,後一部分裝EDX.
  SIMD 寄存器分成2部分[1部分][2部分]
  SIMD ADD 指令  積存器1  ,積存器2 
  運算過程爲 寄存器1 [1部分] = 寄存器1  [1部分] + 寄存器2  [1部分] ;
      寄存器1 [2部分] = 寄存器1  [2部分] + 寄存器2  [2部分] ;
  這2個運行是在一個SIMD積寄存器用硬件來執行ADD 同時運行的。
  這裏只是說了SIMD思想,現在簡單介紹下 MMX,SSE,SSE2。
  
  MMX寄存器是32位的,所以它可以執行4個8bit數據同時運算,也可以執行2個16bit數據
同時運算,具體要看使用哪個指令,在早期沒有SSE指令時,就用MMX,但MMX有缺點,它和
FPU(浮點運算單元,專門執行浮點數運算)共用同樣寄存器,所以當你指令有中斷,從浮
點運算跳到MMX運算,要告訴CPU,從MMX跳到FPU 也要告訴CPU,這樣數據要臨時保存,降
低了處理速度。早期2D遊戲經常用這個。
  現在SSE,SSE2有自己單獨的寄存器可以使用,而且它們是128位的,支持4個32位整數或
者浮點數同時運算。
  這些指令都沒有分支,所以使用時效率要我們掌握,因爲執行都是並行的,一個指令完
成多個計算,所以即使你編寫SIMD代碼很差,速度也會提高几倍,遊戲中經常用SIMD處理
顏色和數學運算問題。在遊戲速度瓶頸地方用這樣的代碼,公德無量。
 
 2。3。5  ASM SHADER語言 和 高級SHADER 語言
 開始學遊戲編程時,這個知識不一定要具備,因爲你不瞭解3D流水線內部細節學起來還是
比較困難,所當你做完“軟引擎” 瞭解3D流水線,在學這個語言很容易,接下來的語言發
揮,就靠你自己了。
 早期的遊戲,所有的圖形圖象處理基本都由CPU來完成,然後把處理完的數據傳到顯存,
用顯卡來顯示。現在的設計理念儘量解放CPU,把與圖形圖象有關的運算用顯卡來完成。但
早期顯卡只支持固定流水線,所謂的固定流水線就是所有3D數據處理過程都是事先用硬件
實現好的,這個過程是一個大過程,裏面封狀了很多小過程細節,用戶只需要輸入數據,
顯卡負責輸出數據,至於用戶無法干預這個大過程,小過程更是接觸不到。再說的通俗一
點,一個空間3D三角形要想顯示到計算機屏幕上,基本要經歷2個大過程,頂點處理和象素
處理,頂點處理封狀了很多空間變換的小過程,象素處理包括象素混合小過程。這個過程
是不可以訪問的,我們只能通過顯卡提供的接口來控制,而且改變方式很單一。(剛接觸
這些可能不明白,現在你知道的不用太詳細,就知道大過程是不可以干預的就可以了,或
者是隻有很少一部分可以干預)爲了讓圖形圖象處理更加完善話,讓人們可以參與到整個
3D流水線中,實現更多豐富的效果,顯卡開始出現GPU單元(圖形處理單元),這時的3D流
水線從固定流水編成了可編程流水線,有了早期的GPU 指令,大家都稱爲 SHADER指令,也
就是ASM SHADER,和彙編一樣,這些指令都是和GPU指令一一對應的,隨着硬件更新,GPU越來越強大,支持指令越來越多,ASM SHADER 從1。0 到 1。4 ,到
現在3。0版本。由於ASM SHADER 用起來不方便,就象我們用匯編寫程序一樣,所以又出現
了高級SHADER語言,有DirectX3D下支持HLSL(high level shader language)和 OPGL下
支持的GLSL(opengl shader language)這些語言都是面向過程。由於硬件設計限制,這
些語言不能象C語言那樣隨意使用,SHADER語言有自己的使用規範,大家學習時一定要弄明
白3D流水線內部實現過程,再使用SHADER簡直很容易。
 還有一個要說的是,GPU現在還不支持分支預測,但GPU編程語言現在已經提供了豐富的條
件判斷,條件判斷還是會影響到速度的。
 
 重點你要掌握的是,數學,c和c++,彙編,數據結構,基本掌握的是計算機體系結構,離
散數學,編譯原理,計算機網絡,操作系統,軟件工程,數據庫,人工智能。可以說這些
是計算機最基礎的學科,你只有掌握了它們,無論你專研計算機哪個領域,你的基礎都是
足夠的,遊戲編程中這些學科都可以用到,我們不用每個學科都精通的要命,我們要精通
的是遊戲編程,也就是接觸到和遊戲相關的,我們有這些基礎完全可以看懂,然後我們在
用自己時間來去專研這些學科在遊戲領域的應用。
 
 四。遊戲編程,她的大門已經爲你打開。 
 
 1。 顏色之迷
 
 計算機怎麼顯示圖形的,這個你必須要弄明白,計算機顯示彩色圖象是經歷了一個什麼樣
的發展過程。
 1。1 象素和屏幕顯示點
 計算機顯示一個圖象是由象素組成,我們通常說的分辨率就是屏幕上顯示多少個象素。如
果一個屏幕最大可以支持1024*768那麼它也可以支持800*600,當你屏幕分辨率是800*600
時,一個象素佔據了屏幕多個屏幕顯示點,也就是說,只有當你分辨率調節到最大時,屏
幕顯示點和象素點纔是一一對應的,至於一個象素佔據多個屏幕顯示點後顏色怎麼顯示這
個是硬件的事,我也不是很瞭解。象素都是2進制存儲,然後由硬件根據顯存中當前象素值
,根據顏色顯示模式的設定,來顯示指定顏色。
 1。2 顏色組成和模式
 計算機要顯示顏色,每個象素都有自己的顏色,通常顏色有3種模式,一個是調色板模式
,一個是16bit模式,一個是32bit模式,我這裏說的通常,早期也有4bit模式,我要講出裏
面的細節,讓看的人真正理解,不是死記硬背,你就會發現實質上只有2種模式,一個是調
色版模式和bit顯示模式。
 我先介紹位顯示模式,從4bit開始,早期顏色顯示很單調,硬件只支持16個顏色,當然這
16個可以是黑白的,也可以是彩色的。總之硬件就支持16個顏色。所以用4bit表示4bit 2
進制正好可以代表16個。
 隨着硬件發展支持的顏色越來越多,發展到16bit,16bit開始有了嚴格限制,顏色是有三
種色彩基元組成,也就是紅綠藍,人送江湖稱號RGB,16bit分成1555格式和565格式,155
5就是1位給ALPHA(表示透明)分給RGB分別5bit,5bit可以表示色彩基元顏色是32種,RG
B組合起來就是15bit,就是2的15次方,可以表示很多顏色了。而565格式沒有ALPHA位置,
直接分給RGB位數爲565,也就是綠色多了一位,傳說中,專家說人眼對綠色明感,所以給
綠色多分了一位。
 而32bit分給 ALPHA 和 RGB 分別是 8888,每個都是8bit。
 其實標準的顏色都是每個分量都是8bit,每個色彩基元都是256種,而16bit模式不能顯示
出真實世界色彩。
 調色板模式一般都是針對每個分量是8bit,也就是顏色組成是32位的。調色板模式有一個
映射表數組,這個映射表數組每個元素都存放的是32位的顏色,而顯存存放的是一個索引
,但硬件讀出顯存當前象素值時,然後用這個值當作索引去映射表數組裏面查對應的顏色
,然後顯示到屏幕上。 
 相比較而言,調色板模式是最早期的,例如早期FC 8bit機 每個象素只佔8bit,只能表示
256種顏色,而我們彩電可以表示很多顏色,爲了節省顯存,增加處理速度,還顯示出多種
顏色,FC用調色板模式,而我們想換顏色時,其實只換調色板映射表數組某一個值就可以
了,索引都不用變,畢竟索引是寫在顯存中的,一般改寫顯存還是速度很慢的。16bit模式
也是在處理速度上,節省存儲空間上得以應用。畢竟這些顯示模式都是爲了應付以前硬件
速度太慢而設計的,現在一般都用32bit模式。而且無論顏色基元的數字越大表示這個基元
顏色越淺。
 還有一個要說的就是ALPHA,這個分量是表示透明度的,這個分量如果是8bit,那麼它可
以表示256種透明程度,255表示不透明,0表示完全透明。
 現在大家知道你設置屏幕或者遊戲時1024*768*32 什麼意思了吧!每個象素佔32bit,屏
幕顯示1024*768個象素。
 
 1。3 顏色的運算
 計算機支持顏色運算都是無符號顏色運算,顏色沒有負數,而且顏色運算有CLAMP和MOD
 如果每個顏色佔8bit,顏色表示範圍爲0-255
 這裏CLAMP指的是
 if(x<0) x=0;
 if(x>255) x=255;
 這裏MOD指
 if(x>255) x = x%255;
 Color1(a1,r1,g1,b1) Color2(a2,r2,g2,b2) 
 顏色加減都是向量加減,每個分量做加減
 1。3。1顏色加法
        Color3(a3,r3,g3,b3) = Color1(a1,r1,g1,b1) + Color2(a2,r2,g2,b2)   
 a3 = a1 + a2;
 r3 = r1 + r2;
        g3 = g1 + g2;
 b3 = b1 + b2;
 顏色加法一般都用CLAMP
 1。3。2顏色乘法
 Color3(a3,r3,g3,b3) = Color1(a1,r1,g1,b1) * Color2(a2,r2,g2,b2)   
 a3 = a1 * a2;
 r3 = r1 * r2;
        g3 = g1 * g2;
 b3 = b1 * b2;
 顏色乘法一般都用MOD
 顏色加法和乘法在象素混合效果上經常用,有時爲了到達一個效果,加法和減法混合用,
至於什麼時候用加法,什麼時候用乘法,沒有嚴格的規定,還是要看效果,一般對於全局
光照模型顏色之間要用加法的,但其他光照模型可能不同,紋理混合或者紋理和顏色混合
,加法和乘法都有各自用途。
  
 2。Directx OpenGL到底用來幹什麼?
 
 這裏只說他們支持圖形和圖象部分,其他部分不說。
 很多人都聽過這2個名詞,其實他們是一個函數庫,這個函數庫爲我們做了一些最基本的
和底層打交道的處理,其他它們還提供了一些常用的3D函數庫,算是一個2次開發,其實2
次開發一般和底層沒有關係,所以在遊戲引擎中很多都自己來做,微軟做了很多2次開發,
可以算是一個引擎。我前面說了,引擎沒有明確概念,只有適應程度之分,用它這個提供
的來做遊戲,還是差很遠,做小遊戲當然沒問題。
 我主要說說和底層打交道那部分,DX和OPGL最大功勞在於充分調度和發揮了顯卡性能,把
顯卡的特性用接口的形式提供出來,他們各自都有自己的管理層次,管理方法,管理管線
,至於怎麼管理,我也不是很清楚,但當你使用和顯卡資源相關的API時,你要仔細看這個
函數各個參數說明,它會根據你的指定,來管理顯卡。但他的管理只是一部分,還有很大
一部分要引擎裏面自己處理。
 如果你不想自己寫驅動的話,那麼你還想控制顯卡,你就要用這些API,D3D(DX中主要處
理3D的)和OPGL使用上還是有很大不同,所以學習他們也還要花費一些時間。我當初學習
時,由於不瞭解3D渲染流程,學起來特別困難,很難看懂,我就放棄了他的學習,學習制
作“軟引擎”(用CPU來實現顯卡提供的硬件功能),然後再學D3D,很容易的。有時後放
棄是爲了選擇更好的,並不是真正的放棄。
 至於學習D3D還是OPGL,我個人認爲無所謂的,但好象OPGL越更新越混亂,沒有DX那麼清
晰,我也是聽別人說的,畢竟我不是很瞭解OPGL。
 
 3。遊戲編程中的常用術語
 
 遊戲編程充着大量常用術語,我不打算把它們都列出來,實在太多,我想對於初學者是來
說,我希望,你在學習遊戲編程時,自己多查下資料究竟這些術語都有什麼含義,記住一
定在學習遊戲編程時去查,也就是說,針對問題去查,而不是在沒有遇到任何問題時去查
。其實我們的教育有個弊端,任何知識我們學了,不知道怎麼用。其實很多知識都是我們
遇到問題時再去查資料,去找解決方式,而不是在不知道這個解決方式用來解決什麼的情
況下嚇學。
 最好大家把這些術語的中文和英文名稱看見都能知道是怎麼回事,因爲你到以後看英文書
時,如果你知道這個術語的含義,看起來會很容易。

 
 五 遊戲編程中的2D遊戲,你首先要做到的。
 
 通往神殿的第一個考驗就是這個,不知道你是否能走下來,相信自己會成功,你的信念一
定要不可動搖,當你走過這段路的時候,想想你現在所得到的,付出的其實不算什麼。

 很多人可能會問,我想做3D遊戲,2D遊戲學它幹什麼。其實3D遊戲處理可以分成2個部分
,一個是3D空間數據處理,經過紋理映射把象素寫到屏幕緩衝,接下來其他特效處理都是
歸結到2D問題。
 所以你想真正瞭解遊戲圖象處理過程,還是要學2D的。2D原理相對3D來說簡單很多,學起
來也不是很難。我建議去看《WINDOWS遊戲編程大師技巧》裏面的代碼都讀明白,它用C語
言實現一個小的遊戲引擎,我希望你用C++封狀成類的形式,重新按照自己規劃來實現,最
後做出個遊戲。用引擎做出的遊戲和直接做遊戲還是有很大區別的,這樣你引擎也就符合
引擎的概念,代碼重用性更強。這本書用的DirectX中DDraw接口來實現的,你一定要了解
你使用的工具,它能用來幹什麼,它不能用來幹什麼,這樣你才能很好的遊戲編程。如果
你不瞭解C語言,怎麼用C語言編程,都是一個道理的。我不想在過多詳細介紹DDraw爲我們
提供了什麼特性,你自己去看書。
 2D遊戲中,最常用的概念就是貼圖,把一個圖象貼到另一個上。2D遊戲中一種處理模式是
在各個圖片上的處理,還有就是在象素上的處理,其實這些都可以歸結到象素上的處理,
象素處理,就是處理顯存數據。
 顏色模式,《WINDOWS遊戲編程大師技巧》這本書講的很詳細。
 2D動畫系統,《WINDOWS遊戲編程大師技巧》這本書沒有詳細介紹,但你看它的代碼,代
碼寫的很清楚而詳細,你就知道的。
 GDI 我不知道大家聽說過沒有,它是WINDOW自帶的圖形圖象接口,我希望大家也能瞭解下
,當時我是GDI和DDRAW一起學的,然後分別做了引擎,2個引擎接口也一樣,遊戲移植非常
容易。 
 
 一個最重要的問題就是調試,8BIT模式下的遊戲,用編譯器帶的單步調式是不可能的,我
機器死機N回。我現在也沒有發現好的辦法,最好的辦法就是自己做一個LOG日誌系統,把
所有調式信息都寫到文件裏,用任務管理器把當前程序關掉,然後看文件寫的信息。
 2D遊戲製作細節我沒有詳細介紹,畢竟我不是在講怎麼製作2D遊戲,我是講你應該注意什
麼,怎麼學,我想《WINDOWS遊戲編程大師技巧》會給你想要的一切。當然我在學這本書前
已經有了一些2D遊戲基礎,以前用VB做過遊戲,用GDI也做過,所以學起來還算容易,如果
你以前沒有任何遊戲編程基礎就直接用DDraw,那麼我希望你多下點工夫,把它製作遊戲的
流程都搞清楚,記住什麼時候用自己的雙手做出了自己2D遊戲,你纔算2D遊戲編程過關了
。這本書仔細看吧!直到把它所有的精髓都掌握。
 還有一個要說的就是,圖象處理常用算法,大家可以多看看圖象處理的書,遊戲中特效經
常用到,其實如果你真想一心搞3D,2D上做一個坦克大戰這樣的遊戲就可以了,很多2D處
理詳細東西,在學3D遊戲時,都可以接觸的。
 六。遊戲編程中的3D遊戲,考驗你耐力和勇氣的時候到了!
 
 前面你所遇到的一切都是小小測試,證明你有能力接受這個挑戰,在3D遊戲這個廣闊無垠
的天地裏,它比2D遊戲更有讓你想象餘地的空間,因爲3D遊戲不僅僅包括2D遊戲所有,而
且還包括很多其他東西。努力吧!朋友們,無論遇到什麼挫折,都不要放棄,因爲她最後
會給你想要的。
 我不知道其他人學習3D遊戲是一個什麼樣的過程,這裏我只介紹我自己的學習過程,因爲
我是從挫敗中走過來的。
 開始學3D,腦袋裏一片模糊,只有一點點大學裏學的計算機圖形學相關的知識,我不得不
說學校裏講的計算機圖形學和遊戲還是大相徑庭的。
 (這裏允許我抱怨一下,國外很多大學都開設了3D遊戲編程的課程,而且很專業,我看過
老外的PPT。相對於國內,也有些,但不專業,我說遊戲學院騙錢你不要打我,它確實能讓
你找到工作,但你做的永遠是下手,學不到底層的東西。我看過遊戲學院開設的課程,沒
有一個是有技術含量的,用“外包”形容在貼切不過。道理也很簡單,中國現在牛人很少
,我說搞引擎的高手全國有1000人都是保守的,真正能搞出名堂的,也不多於200人,這2
00人裏面學習遊戲編程經驗10年就很多了,中國3D遊戲起步很晚,相對國外,中國人愛跳
槽的習慣,讓任何公司都沒有技術積累,發展更是困難,所以人才積累的少,而且這些人
都很忙,在加上現在學校教育約束,即使他們想去高校教授遊戲課程也是不可能,何況人
家都不願意去,這樣中國積累的人才更少)
 
 所以你要系統學習遊戲中圖形學理論。
 這裏我經歷了遊戲學習編程一次比較大的挫敗,當時自己是初學者,問過很多人學3D,應
該從什麼入手。很多人都說從D3D開始入手,於是我做了。我不得不說的是,如果你不瞭解
3D流水線過程,學D3D簡直是看天書,當時我以爲自己反覆的看書,寫程序,最後會理解的
,浪費了我大量的時間,最後還是無法靈活掌握D3D,如果你無法掌握D3D,想做遊戲可能
真的很困難。我終於認識到,我選擇的路是錯誤的,那些所謂的高手難道就學D3D學過來的
?那麼他們花費的時間是可想而知的。因爲有些細節你無法掌握,你使用時就覺得匪夷所
思。
 《3D遊戲編程大師技巧》這本書是每個學3D的人都應該看的,這本書把顯卡硬件實現的功
能都用軟件來做,真正讓你理解一個3D東西到最後的屏幕顯示,是一個什麼樣的過程。作
者實現了一個軟引擎,軟引擎就是所有的3D功能都是用代碼自己寫的,沒有用什麼顯卡來
做處理的引擎。這本書是一個經典鉅著,如果你想學3D,即使死也要把這本書弄明白,這
樣不辜負作者寫這本書留下的汗水,寫一本書,尤其這麼PERFECT,太不容易了,國內人翻
譯的也很出色,感謝他們。
 
 《3D遊戲編程大師技巧》繼承了《WINDOWS遊戲編程大師技巧》裏面2D函數,然後3D功能
以及流水線和引擎都是自己完成,這本書的代碼量要有十幾萬,我當時用C++重新封裝了《
3D遊戲編程大師技巧》代碼,自己設計了一個面向對象固定流水線模式,代碼量13W左右,
這個過程很艱辛,這本書我看了2遍,最後一共零零散散花費了大約9。10個月的時間。你
會感覺你立刻升級了,HP,MP,CP都增長了,當然也包括RP,哈哈!(不知道這些術語的
,大家多玩玩RPG遊戲吧!)
 好東西去追求,不要怕浪費時間,浪費精力,你想想,你得到的最後會大於你的付出,這
些都不算什麼。很多人問我怎麼學3D,我建議他們不能着急,要從學《3D遊戲編程大師技
巧》開始,大約要8,9個月時間,把每個細節都弄明白,閉上眼睛,怎麼實現就很清楚,
書上每一頁寫什麼都很明確。他們都覺得浪費時間,那麼這樣是永遠學不好的
 
 1 3D數學是你要攻克的
 雖然你數學學的好,但國內的教科書還是和遊戲中用的有些不同,畢竟沒有上過專門講解
遊戲中數學知識的課程。這需要你係統學習遊戲編程中數學,3*3矩陣爲什麼有的人用,而
有的人用4*4矩陣,爲什麼有的用矩陣轉置有的用矩陣的逆。《3D遊戲編程大師技巧》這本
書介紹的很詳細,還有一本書就是《3D數學基礎:圖形與遊戲開發》很不錯(有中文的)
,先系統學習下,然後在學習遊戲編程時,不懂的時候,再回頭看看這些書,把所有的東
西都徹底弄清。你如果數學基礎好,學這些都很容易,以後遊戲編程中最深奧的地方之一
就是數學。
 
 基本上我總結下,你要知道的是:
 向量  4維 和 3維向量有什麼不同 
 矩陣  4*4 和 3*3 矩陣有什麼不同
 四元數
 ELUER角
 以後有機會深入研究碰撞中的各種算法,還會遇到很多關於數學的問題,上面只是渲染有
關係。
 2 3D流水線的實現過程
 我無法用言語來表明這個過程的重要性,整個3D流水線是是3D遊戲的脊柱,你的基礎知識
牢固與否,主要看你這裏。3D流水線每一個細節我希望大家都要搞清楚,這個過程對初學
者是要花費大量的時間專研與琢磨,D3D的固定流水線都是由硬件完成,如果你的硬件不支
持,它會用軟件模擬,好,關鍵就在這裏,軟件模擬是怎麼回事,而《3D遊戲編程大師技
巧》的流水線是自己用C語言寫的,也就是用軟件完成,這樣你能瞭解整個流水線的細節,
同時你在學D3D時,對照着來學,你會發現,D3D學起來很容易。現在D3D和硬件都支持可編
程流水線,而且DX10沒有固定流水線,所有變換過程都用SHADER語言控制顯卡完成,這個
過程是3D流水線的縮影,所以3D流水線的重要性是是可想而知的。
 我說了這麼多,3D流水線對你是一個新鮮的名詞,我也沒有去解釋它,我不想去解釋,完
全留給你自己去,我始終堅持着,我只告訴你去的路,路上有什麼困難,應該怎麼走,你
自己去體會這條路上的酸甜苦辣。我希望大家多花些時間在這上面,真真正正的自己寫代
碼實現一下,基礎對你真的很重要,記住我說的話,很多人學習時,認爲自己理解了,沒
有去實現,其實還是那句話“紙上得來終覺淺,絕知此事必躬行”,相信我,沒錯的。

        基本上我總結下,你要知道的是:
 3D中的頂點結構,每個分量都用來幹什麼,三角形是基本渲染單元。
 模型空間——》世界空間——》相機空間——》投影空間——》屏幕空間——》光柵化 
這個過程和運行原理
 材質究竟是什麼?
        常用的宏光照模型原理,光源類型
 光源和材質和法向量關係
 光照在哪個空間去執行(其實不是很嚴格)
 紋理尋址,紋理映射方式,紋理混合,紋理過濾。
 1D 2D 3D CUBE 紋理
 Z 1/Z緩衝
 2種相機模型
 ALPHA 透明
 關於光柵化三角形要特別注意,他最後混合紋理和光照顏色和ALPHA透明,還要判斷深度
緩衝,最後是插值填寫每個象素。
 3 D3D究竟要如何學習
 《3D遊戲編程大師技巧》和D3D流水線過程還是有些差別的,比如在投影矩陣上,其實它
們都是大同小異,只不過表現形式不同,原理都一樣。我希望大家自己可以找出來,深刻
理解裏面原理。
 還有一個重要的東西,就是哪些是D3D開發遊戲必須有的,哪些是D3D自己擴展的。必須有
的,就是同硬件打交道的部分,而D3D中自己擴展了很多庫函數,例如數學庫,這個完全可
以沒有,我們自己來實現,還有D3D中的EFFECT接口,它自己定義的。X文件所有函數接口
。也就是說,你要理解,哪些是遊戲開發中必須有的,哪些是遊戲開發中自己完全可以不
接觸底層來實現的。
 遊戲編程中有3個緩衝區,顏色緩衝,深度緩衝,模板緩衝,前2個《3D遊戲編程大師技巧
》中,都詳細的介紹,而模板對初學者可能很晦澀,大家先弄明白模板的機制,然後多看
些例子,我想你會深刻理解它的含義的。
 D3D的學習,可以看D3D SDK的例子,也可以找一些書籍,很多的。
 
 基本上我總結下,你要知道的是:
 D3D提供基本常用底層接口,那些是是D3D爲了編程必須提供的,那些是不用提供的,比如
數學庫我們完全可以自己寫。
 D3D頂點 索引BUFFER
 顏色緩衝,模版緩衝,深度緩衝 以及對這些緩衝的操作
 目標渲染對象、
 D3D 中的3D流水線
 單通道渲染,多通道渲染。
 熟練操作上面的所有,這些都足夠了,其他的都是D3D中多餘的,如果你要自己做引擎,
很多都要自己實現,當然初學者可以就用它擴展的函數庫,也很方便的。
 
 4 其他要知道的遊戲知識
 下面知識都屬於很強的遊戲技術範疇,他們只屬於單單遊戲中技術支持,引擎就是用合理
的方式,把所有3D相關包括流水線和下面這些都整和到一起,但這種整和是有效的管理。

 場景管理算法 :BSP OCTREE QUADTREE PORTAL PVS
 動畫系統 :骨骼動畫,蒙皮骨骼動畫,漸變動畫,和這些動畫的混合
 陰影  :陰影體 投影陰影 陰影影射
 剔除算法 :包圍球 OBB AABB BHV算法
 LOD系統         :視點無關LOD 視點相關LOD
 廣告牌  :跟蹤相機方向 和 只圍繞y軸旋轉 粒子系統
 這些是比較常用的,常常碰到的,根據基本的顏色運算,空間運算還能衍生出很多遊戲特
效,等待你自己去看書,去解決。
 
 
 
 七。3D引擎編程,令你的挑戰達到了極限
 就象我前面說的,引擎沒有嚴格定義劃分,但對於當代的引擎,似乎大家都趨向于越好的
東西,越健壯的支持,才稱上引擎。現在遊戲玩家對畫面擬真程度要求很高,這就要求引
擎能更好的處理3D世界中大量數據,一個好的引擎,起碼要做到以下幾點(引用《3D.Gam
e.Engine.Architecture.Engineering.RealTime.Applications.with.Wild.Magic》裏面的
話)
 1。如何把3D世界中大量數據,讓它實時快速處理。
 2。引擎中的渲染器(用來管理數據,進行渲染處理的)接口應該怎麼定義。
 3。如何讓使用引擎的人,能很容易的使用引擎。
 4。當引擎中添加新特性時,如果讓引擎改動最小。
 我感覺這4句話,概括的很精闢,如果讓我來概括,好象我現在還沒這個能力。這是一個
當代引擎的新的定義,雖然不是全面,但它一語道破天機,如果你的引擎能達到上面4點,
我想它已經足夠的優秀,同時說明你也很優秀了。下面我就分別解刨這4句話,讓大家對引
擎有一個深刻的瞭解。我只是分析,這4句話要求高手纔可以完全去達到,我現在還不具備
這個能力,所以只能幫大家分析。
 1。如何把3D世界中大量數據,讓它實時快速處理。
  
 3D世界中充滿了大量得數據,有效的處理只可以看見的,能感受到的就可以了。
 3D引擎中,很多時候都在處理剪裁和剔除的問題,把不可見的或者和碰撞無關的數據用最
快的方法弄掉,不讓它進入顯卡,一切還是停留在3D空間中。剪裁,剔除還有碰撞處理,
永遠是3D引擎中最常見的話題,現在有很多成型的方法,大家自己通過學習就可以瞭解的

 2。引擎中的渲染器(用來管理數據,進行渲染處理的)接口應該怎麼定義。
 即使你把3D數據給了顯卡,還是不能達到最快顯示,我們要把這些數據分類,重新組織,
這裏面還涉及到存儲管理的問題。你的渲染器的接口要定義的和底層提供的DX或者OPGL相
通,因爲最後你要調用的是這2個庫裏面的函數。
  
 3。如何讓使用引擎的人,能很容易的使用引擎。
 這是一個經驗問題,一個軟件設計給用戶使用,怎麼讓用戶很容易上手。但無論什麼樣的
用戶,你必須對3D有了解纔可以使用,否則神仙也沒法完成這個引擎。
 4。當引擎中添加新特性時,如果讓引擎改動最小。
 
 經常說的一句話就是“計劃沒有變化快”,怎麼能讓引擎跟上時代的步伐,當硬件有革新
,我們引擎就有革新,出現新的處理方法,引擎也要改進,用戶需求改變,引擎接口也要
改變,我們要求引擎的所有改動最小,這樣纔是一個完美的引擎。
 引擎是軟件設計+算法+編程的結合體,難點在軟件設計上,一個好的引擎,代碼幾百萬很
正常,沒有一個好的設計來規範它們,混亂是不可避免的。
 
 對於一個引擎,從設計到編程都很重要,一個人完成一個好的引擎是不可能的,多人協作
來完成引擎,在大家相互配合的同時,每個人對自己的要完成的任務必須精通,還要有人
協調這些工作。
 好的引擎,要有一個抽象層次,然後是渲染API層次,還要支持多操作系統平臺,我在這
裏沒有過多介紹各種技術細節,因爲很多細節在書中都可以找到,加上你的聰明,很多技
術算法可以自己創造的。
 對於遊戲中大量算法,引擎中到處都是,碰撞,場景管理,光照,紋理混合,動畫系統,
粒子系統,內存管理,資源管理等等大家要多實踐,多思考,多看書,多看資料,把握每
一個細節,把握每一個整體。看書時要帶着問題去看,同時也要帶出問題,因爲沒有一個
方法是完美的,必定會有或多或少的缺陷。
 
 現在開源的引擎確實不少,其實程序員都有一個共性,看別人代碼有時不如自己寫,確實
這樣,有時只看代碼去體會別人的思想真的很難,但有時爲了去學習也要硬着頭皮去看的
,跟蹤代碼。開始時,如果你不瞭解引擎究竟是什麼,這時最好集中看一個開源引擎,一
定要把它的工作原理都弄明白,這樣你會得到很大的提升,你就會明白引擎是什麼,爲什
麼不用D3D直接編寫遊戲,還有一點就是,有機會一定要去實現,這樣你的體會會更深。
 
 八。我的遊戲編程學習生涯
 
 也許從出生開始,我就註定要執着,其實執着並不是好事,很多痛苦和失敗源於此。那什
麼樣的執着是最好的,有計劃的執着,纔是可取的,盲目的執着,適得其反。
 從我學編程那天起,是遊戲帶動的我,我愛遊戲,所以纔會從事遊戲行業,我的熱情總是
源源不斷,只要我肯努力,她就會給我驚喜。
 大學期間做過很多程序,一些成型的作品我始終留着它們是對我過去的努力程度的見證。
 (http://new.qzone.qq.com/79134054/blog/1226580538這個是我所有作品,我並沒有炫
耀自己的意思,我只是想告訴大家,這個世界很少有不可能的,只要你肯努力,記住一定
要有計劃的努力,你會得到你自己所要的,年輕時的時間很寶貴,當我們用自己老年的時
間來禰補時,我想只有“後悔”纔會替你說話。)
 大學裏迅猛的專業課,讓我只能擠時間來學習遊戲編程,是停留在2D上,而且用VB來寫,
這樣不用處理底層。大4下學期,大多數時間是我自己,我在複習C++的同時,慢慢的讀着
一本買來一輩子你都不會後悔的書《WINDOWS遊戲編程大師技巧》。
 研究生的生活讓我更加可以掌握自己的時間。研究生開的這些課程,對於遊戲編程來講,
我覺得有3門課程很值得去聽——進化計算,人工智能和神經網絡,其實它們三個都是人工
智能範疇,如果你想以後搞遊戲人工智能,不要放棄它們。
 這年年底,我完成了自己的2D遊戲引擎,分別是Directx和GDI版本(不瞭解不要緊,後面
我會解釋),並用一個月的時間開發了坦克大戰遊戲,由於遊戲的和遊戲引擎設計的很好
,輕鬆的可以在2個引擎上移植,並可以簡單的從32bit模式變到16bit模式。
 從這以後開始了我漫長的3D生涯,我花了8,9個月的時間熟讀絕世好書《3D遊戲編程大師
技巧》兩遍,代碼用自己的方式重寫,12-13W行的代碼。說它絕世是因爲這本書發行量很
少,而且只出一版。
 同年9月份,也就是2007年9,到10,2個月的時間,由於有了“軟引擎”實現基礎,很容
易的掌握了D3D。
 我開始了自己創作引擎的生涯,《3D GAME ENGING PROGRAMING》這一本具有跨時代意義
的書,出現在我的眼前,花了將近半年的時間,我掌握了這本書的所有精髓,完成了自己
的第一個3D引擎。
 一個引擎如果沒所作爲,就象一個人總誇耀自己多麼厲害,而沒有實際行動一樣,不會被
人放到它應該有的位置。2008年5月-6月《FOCUS ON 3D TERRAIN 》一書給了我的引擎的發
揮自己的舞臺,我在這本書的內容基礎上,加入了很多其他元素,最後完成了整個地形渲
染過程。
 2008年7月15日,我終於完成了自己革命性的著作,花了2個星期,把整個過程寫了出來,
150頁的WORD,這是一個艱辛的過程。但自從我發到網上得到了大量的網友的肯定後,我堅
信我一定會走的下去,而且走的更好。
 找工作這段時間,我花了半年,逐行代碼刨析了WildMagic圖形引擎,自己引擎框架在改
進它的基礎上誕生出來,如果時間上允許,我第一個跨時代同時支持抽象層和底層的引擎
就會出現。
 到目前位置,我只開發了一個小的圖形引擎,是完全在掌握D3D和3D流水線,以及一些常
用到的場景管理和特效算法上,進行的。寫圖形引擎的書有大約4,5本,專注於寫圖形引
擎的就3本,一本是《3D GAME ENGINGE PROGRAMING》,一本是《3D.Game.Engine Design
》還有一本是《3D.Game.Engine.Architecture.Engineering.RealTime.Applications.wi
th.Wild.Magic》,第一本相對簡單,是每個想初識引擎的人必須看的,這本書只是一個小
引擎,對於我上面提到的4點,幾乎每一點都沒有完全做到100%,1,2兩點相對做的還可以
,但在設計上還是有很大欠缺。對於第2本,完全講的是3D引擎中用到的算法,都是數學符
號表達,很晦澀難懂的,對數學符號不明感和沒有毅力的人真的很難看明白,這本書沒有
必要專研,很多算法用的時候去查找就可以了。第3本是大家必須看的,相對於第一本,它
更重視於軟件框架設計,你會漫漫體會到,對於大型軟件軟件框架的設計相對於編程是很
重要的。
 第一本書我已經看完2編多,(大家打印看吧,比較方便)精髓代碼按照我自己的規劃又
重新實現,於是我有了自己的第一個圖形引擎,接下來又添加了3D和2D動畫系統,碰撞系
統,陰影體,廣告牌等等,到2008年4月結束,基本開發完畢,這個過程經歷了7個月,調
試是我每天要做的。
 2008年5月開始主要研究地形系統《FOCUS ON 3D TERRAIN》,這本書沒有引擎,只是講地
形算法,我在自己引擎上,添加了地形系統,場景管理等等。
 到2008年7月中,開發完畢。這個程序,總共代碼5,6W左右。
 然後花了一個月又拾起了很久沒接觸的SHADER。
 http://dev.gameres.com/Program/Visual/3D/SceneDesign.mht這個是整個開發文檔,
現在被GAMERES網站收錄,裏面的源代碼是1。0版本,還有一點小錯誤,最新版本代碼在我
這裏,如果想要的話,可以聯繫我 QQ。
 
 
 
 九 遊戲編程經典書籍
 這裏我介紹一些經典的遊戲編程書籍,現在經典的好書,我都有。能買到的,我都買了,
買不到的,至少都有電子版。我會在畢業前整理出來,用BT發到燕子上,包括所有英文電
子書和原代碼,因爲中文基本可以買到,我就不會發了,我希望你還是支持下正版書事業
,有些中文絕版的書,買不到,電子書也沒有,只有大家自己去打印了。
 寫到這裏我曾經猶豫過,是否把現在世面的好書都大體介紹下,想來想去,既然寫到這裏
了就所有好書都介紹下吧!我看過的我就詳細介紹下,沒看過的,我也曾經大體瀏覽過,
覺得不錯的也介紹下,3D API方面這裏是列出了和D3D有關的,OPGL沒有列出。
9。1 遊戲基礎篇
 《3D數學基礎:圖形與遊戲開發》清華大學出版社,國外人寫的,有中文的
 這本書是遊戲數學基礎,講的真的很不錯,我認爲開始學遊戲數學就要看這本書,沒有電
子版的,現在可以買到。
 《3D遊戲與計算機圖形學中的數學方法》清華大學出版社,國外人寫的,有中文版
 這本書絕版了,個人認爲這本書寫的質量還可以,不能說特別好,做工具書或者看看原理
還是不錯的,有英文電子版。
 
 《Mathematics.for.3D.Game.Programming.and.Computer.Graphics》只有英文電子版
 這本書寫的是3D數學顛峯,作者寫的很細緻,可以仔細研究,也可以做工具書。
 
 《計算機圖形學幾何工具算法詳解》電子工業出版社 國外人寫,有中文版
 這本書是一本工具書,查找算法,很方便,寫的很好,很細緻,我經常用它。好象沒有電
子版。
 《遊戲編程之旅——我的編程感悟》電子工業出版社 國人寫的
 這本書講的主要是作者編程感悟,作者感悟很多地方和我差不多,從他的身上可以看到熱
情,看到激情。有電子版的
 《C++編程思想》和《C++ PRIMER》
 這2本書經典的很,是每個學習C++必看的書,《C++ PRIMER》第3版現在買不到了,他們
都電子版的。
 《WINDOWS程序設計》上下, 北京大學出版社,有中文的
 這本書是學WINDOWS開發必須看的,如果不想自己開發複雜GUI,就用它吧,裏面GDI編程
和圖形圖象有關係的,掌握了對你有大好處。有中文電子版。
 《C++遊戲編程》清華大學出版社 國外人寫的,又中文的
 這本書講的是怎麼用C++開發高效率的遊戲,寫出高效率的代碼,很有看的價值,有中文
電子版
 《Data Structures for Game Programmers》國外人寫
 這本書講解遊戲中用到數據結構,也就是數據結構和遊戲的結合,寫的十分經典,是一本
特別好的書,只有英文電子版。
9。2 2D遊戲經典
 《virtual c++角色扮演程序設計》中國鐵道出版社 有中文的
 
 這本書是小日本寫的RPG遊戲,裏面設計到了RPG大體制作過程,用的WINDOWS GDI開發。
因爲RPG遊戲是遊戲中經典類型,所以學習下,還是對大家有很大幫助的。這本書電子版的
好象沒有,具體我也不敢肯定,沒有電子版。
 《WINDOW遊戲編程大師技巧》中國電力出版社 有中文的
 
 這本書的經典我就不想說了,電子版的應該有,但我買的是書,80左右塊錢,買來值得的
,好象有英文電子版,中文的我就不知道了。
 《ISOMETRIC Game Programing with directx 7.0》只有英文
 這本書是也是2D的經典,真是物有所值,個人認爲特別好。
9。3 3D基礎學習
 
 《3D遊戲編程大師技巧》 人民郵電出版社 中文的絕版了
 
 這本書實在太出色了,可以絕版了,這本書只出了一版,實在不知道出版社這麼吝嗇,很
多人想要都買不到,大家只有打印了。電子版中英文都有。
9。4 D3D學習
 
 《VISUAL C++ / DIRECTX9 3D 遊戲開發導引》人民郵電出版社,有中文的
 這本書講解D3D和遊戲一些相關知識還是可以,我個人認爲還是蠻不多的,相信我。沒有
電子版
 《DIRECTX 3D 圖形與動畫程序設計》人民郵電出版社,有中文的
 這本書就是翻譯D3D幫助文檔,翻譯的質量還不錯,如果不想看英文的,就買下這本書,
很值得的,沒有電子版。
 《3D遊戲程序設計入門》翁雲兵版 國外人寫
 這本書是自由網絡翻譯,翻譯的不錯,有電子版,也有英文電子版。
 《Real-time.Rendering.Tricks.and.Techniques.in.DirectX》重慶大學出版社 有中文

 這本書我沒有買,從圖書館借的,因爲我買的書實在大多了, 這本書大部分是介紹D3D使
用,後面介紹ASM SHADER 做了一些特效。有英文電子版
9。5 3D遊戲進階
 
 《DIRECTX 特效遊戲程序設計》科學出版社 國外人寫的,有中文的
 
 這本書主要講解D3D和遊戲特效製作,是本出色的書,只有英文電子版
 《DIRECTX角色扮演遊戲程序設計》重慶大學出版社 國外人寫的,有中文的
 
 這本書講解了一個3D RPG遊戲製作,講了D3D,遊戲場景管理,特效,等等吧,是本十分
出色的書。有英文電子書
 
 《DIRECTX高級動畫製作》重慶大學出版社,國外人寫的,有中文的
 這本書寫的很好,但翻譯的實在太爛,如果不想看中文的,就看英文原版,有英文電子書
籍。
 《FOCUS ON 3D TERRAIN》只有英文的
 
 這本書講解遊戲地形制作,用OPGL做的,前面寫的還不錯,但後面QUATREE 和 ROAM 地形
系統,寫的實在太難讓人看懂,而且作者說明文字過於簡單(個人認爲),但前面的還是
值得看的。
 《FOCUS ON 3D MODEL》只有英文版
 這本書講解各種流行的模型文件和動畫
 
 《FOCUS ON CURVES AND SURFACE》只有英文版
 這本書講解怎麼用直線畫曲線和曲面
 《Level.of.Detail.for.3D》只有英文版
 這本書主要講遊戲模型的細節層次,很深入,是本難得的好書,專研它是值得的,但看起
來確實很難,涉及到很多數學和理論,看起來還是有些頭痛。
 《Real+Time+3D+Terrain+Engines+Using+C+++And+Dx9》只有英文版
 這也是介紹地形的書,但這本實現了一個管理層次,可以理解爲一個小的引擎,講的很好
的。
 《Game+Engine+Toolset+Development》只有英文版
 這本書我還沒有看,好象講的是遊戲類似插件開發,總之很軟件工程有很大聯繫的,書評
不錯。
9。6 3D遊戲高級篇
 《遊戲編程精粹1-6》人民郵電出版社,國外人寫的,有中文的
 前4本已經絕版,我買的都是打印版,這6本書含量極高,裏面都是一個話題一個話題談論
,聚焦某個問題,基本收錄的都是論文和其他公司研究成果包含了遊戲知識所有領域。這
6本書有英文版的電子書。
 《GPU精粹1-3》第1本人民郵電出版社,第2本清華大學出版社。國外人寫的,前2本有中文

 這3本書,裏面的知識都是翡翠級別的含量,理解起來都很困難,如果你都能掌握,你就
是重量級別人物。這3本書,主要講遊戲圖形和圖象方面知識,如果數學不好,恐怕要看天
書,我說的數學好不是你成績高就能看懂的。有英文電子書。
 
 《3D GAME ENGINE PROGRAMING》只有英文的
 這本書寫的引擎不大,但確十分經典,適合初學者學習,是一本通向高級引擎編程過渡階
段,內容寫的還是很好的,後面還實現了一個GUI編輯器。
 《3D Game Engine Design》只有英文的
 這本書講解的是遊戲引擎理論,太多的數學東西。看起來還是很枯澀的,建議做爲一本遊
戲算法工具書來看。
 現在這本書有英文影印第2版可以買到,價格很合理。
 《3D.Game.Engine.Architecture》只有英文的
 這本書簡直太經典了,但代碼是2。0版本,這本書用的是3。0版本代碼,網上我找了很多
次,還是找不到3。0版本代碼。對於一個引擎編寫者,有理論和軟件框架就可以自己完全
建立一個引擎。
 《Real-Time_Rendering.2nd》國外人寫 只有英文版 
 這本書評價也很不錯,不過我還沒看,主要講的是實時渲染,一些特效等等。遊戲中經常
出現的就是Real-Time_Rendering,大家一定要搞清楚這個名詞究竟什麼意思。
 《ShaderX 3.-.Advanced Rendering》
 講解高級特效製作,我還沒有看,但是以後必看的書,十分好。
 《Shaders_2_.for.Game.Programmers.and.Artists》
 用RENDMONKEY 開發的遊戲特效,講了很多,十分經典。
 《graphics gem 1-5》只有英文的
 這幾本書都是九幾年經典著作,專門講圖形圖象方面的。
 
9。7 遊戲腳本相關
 《遊戲腳本高級編程》清華大學出版社 有中文的
 這本書主要講解遊戲腳本用途,和自己怎麼實現一個腳本語言,講了很多都是編譯原理的
東西,雖然現在都用現成的腳本語言,但瞭解裏面的基本機制還是有必要的,這是一般難
得的好書。只有英文電子書。
 《Game.Programming.with.Python.Lua.And.Ruby》國外人寫,只有的電子版
 這本書講怎麼用腳本語言編寫遊戲,我還沒有看,大體知道它講的應該不錯。
9。8 人工智能相關
 《遊戲編程中的人工智能技術》清華大學出版社,有中文的
 這本書經典的要命,寫的太好了,我不多說了。有英文電子的
 《遊戲開發中的人工智能》東南大學出版社 有中文的
 這本書也很好,有英文電子版。
9。10 物理相關
 《遊戲開發物理學》東南大學出版社 國外人寫的,中文版絕版
 這本書寫的都是物理基礎,理解起來還很容易,是做遊戲物理和物理引擎必讀環節。有英
文電子書。 
 《Game.Physics.Engine.Development》只有英文電子版
 這本書寫的很好,我還沒有看,英文,現在還沒有時間去研究物理,這是研究物理引擎的
好書。
 《Real-Time+Collision+Detection》
 這本書主要講解碰撞處理,我還沒有看,但書評很好,難得的好書。
 《Physical Based Rendering From Theory to Implementation》
 這本書,也特別好,我還沒有看,相信我,這本書自己做了一個基於物理的渲染引擎,所
以很值得看的。
9。11 SHADER 相關教程與特效
 《Learn Vertex and Pixel Shader Programming With DirectX 9》只有英文版
 這本書介紹ASM SHADER,不願意看SDK 幫助文檔那麼看它還是值得的。
 《Direct3D.ShaderX.-.Vertex.and.Pixel.Shader.Tips.and.Tricks》
 這本書在介紹ASM SHADER 同時,還介紹了很多用ASM SHADER的例子,講的很基礎。
 《ShaderX+2.-.Introductions+and+Tutorials+with+DirectX+9.0》
 這本書在介紹SHADER ASM和 HLSL同時,還討論了光照,陰影,霧的特效處理,這些講的
很深入。
 我介紹這些基本都是經典的不行了,還有很多,當然這些也有好的,也有不好的,不想再
介紹了,到時候我會把所有資源都給大家的,自己去研究吧。
 十 淺談物理與人工智能
 
 這2個都不是中國遊戲中的優勢,它們和圖形一樣,要求一定能力積累纔可以勝任。如果
我沒有預測的話,未來中國遊戲中大量的需求將來自物理和人工智能,傳統的網絡RPG會慢
慢不能滿足大家需要,而被時代所拋棄的。
 
 這2方面的編程我只是略知一二,還算一個小白,在此簡單談談。
 10。1 物理
 遊戲中大部分物理模擬都集中在力學和運動學上,本來它們就是一個整體。因爲最後效果
是大家看到的,而看到的都是物體在屏幕上的移動,所以所有的計算最終都歸結到物體移
動上。
 因爲遊戲畢竟是遊戲,人也畢竟是人,沒有必要模擬的那麼精確,同時人也是感覺不出來
的。
 所以要想做好物理上的編程,必須對力學和運動學有系統的瞭解,高中學的力學部分還不
是很足夠,對於旋轉部分,也就是處理力矩和轉動慣量上,高中物理書都沒有講(我那時
是沒有講,而且很多直線線形運動方程推倒其實是用微積分推倒的,高中書上都沒有明確
推倒)
 物理上的模擬也沒有逃脫物理計算基本規則,先是受力分析,然後計算合力,計算加速度
,計算速度,最後計算位置,也可能涉及到動能和動量等知識,還有些流體力學等等吧。
 物理其實處理的問題基本就是檢測物體碰撞,碰撞後的反映,物體運動情況。
 至於理論,大家弄本大學物理,力學部分就足夠,如果數學好的話加上高中的物理知識,
應該學起來不難的。
 《遊戲開發物理學》這本書很好,可惜絕版了,但有電子版的,也有中文版。
 10。2 AI
 相對物理的編程書籍來說,AI的書很多。
 AI是研究生必須學的課程,包括傳統的AI和計算智能。遊戲中常用的傳統AI包括自動機理
論,A* 算法,回溯,圖搜索,剪枝等等吧。計算智能包括的是:遺傳算法,模糊計算,人
工神經網絡。
 我答UBI筆試的時候,裏面很多題都是A*算法,可見FPS遊戲中大量存在的都是AI的路徑搜
索問題,讓電腦更加智能。
 AI的遊戲編程書很多,我就看過幾本。《WINDOWS遊戲編程》中有一部分講的AI,《遊戲
開發中人工智能》 《遊戲編程中的人工智能技術》這3本都有中文的,而且都有大量的實
例,對於那些大量理論的書籍來說,看看它們還是很通俗的。還有很多好書,都是英文的

 十。一 各大遊戲公司基本情況和一些招聘經驗
 此部分都爲自己的感受,不一定準確,但起碼我認爲不能差太多。
 11。1各個公司基本情況
 
 這些公司中最有實力的就是完美,完美前身是祖龍工作室,也就是《抗日》《大秦悍將》
製作工作室,它是中國最早3D遊戲。大部分學生其實都抱着學習技術目的去投奔它,可是
他們體系很完善,已經形成規模,核心東西不是很容易接觸的。完美薪水很高,感覺每個
人一年拿15W都是沒問題的,具體薪水每個人都不一樣的,而且都嚴格保密,用他們HR話來
說,完美“不差錢”,待遇福利也很好,能解決北京戶口,任何公司都比不上的,他們現
在只招遊戲邏輯的人,做引擎估計是不招了,即使招也是非常牛的人纔可以。
 巨人的實力也很強,研究生年薪11W,本科好象是9W,技術上也不錯,他們對待人才態度
也很好,宣講會上,他們每個部門的負責人都到場了,可見他們對招聘的態度分負責任,
而且他們對於引擎研究,成立了一個專門研究中心,他們很鼓勵女生還應聘的(主要是策
劃)。順便說下,史玉柱是他們老總,外界對他褒貶不一,但我還是很敬佩他的,畢竟他
很厲害,天天腦白金廣告就他們公司弄的。
 QQ可以算是比較大度的公司,他是唯一接受“霸王筆”和“霸王面”的公司,其他公司都
不行的。QQ待遇研究生13W,本科生10W。對於人才上,他們真的很負責,這也是一個共性
,公司對於自己缺少的人才,他們都是很積極的,我挺看好騰訊未來發展,大型3D遊戲上
是qq的主要缺口,他們不會放棄的,就是咂錢,他們也敢的。
 
 盛大這個公司也很好,雖然沒有前3個薪水多(至於具體多少我就不知道了,一直也沒告
訴我),但福利很不錯,他們對人才態度非常不錯,盛大在3D遊戲上也在努力,因爲盛大
是遊戲起家,所有他們也不能放棄,現在他們又開通了校園牛人通道,只要你符合,報銷
提供車費,邀請你去。
 UBI我筆試後就沒有了通知,本來是還有個網上答題,不知道我沒接到,UBI HR說只要投
簡歷的人能收到,我也莫名其妙。其他情況不是很瞭解。
 金山這個公司給了我深刻印象,他們技術總監給我上了一堂意義深刻的課,我收益非淺,
再此表示感謝。金山公司這麼大,遊戲公司中是給的最少的,研究生好象是6000,但能解
決戶口。金山有很多工作室,最有實力的是西山居,我面的是烈火的。他們3D遊戲也很匱
乏,所以也是急需大量3D人才的。
 最後我去的是象素公司,這個公司給留下的是最深刻的印象,他們雖然是小公司,但QQ的
《尋仙》是他們做的,他們主程很好,而且他們3個主程穿着就是學生打扮,感覺很親切,
他們裏面沒有官僚,沒有霸權,本科生薪水4500,研究生6000,如果你真想學技術,我認
爲這個公司是一個不錯的選擇,他們會讓你選擇自己喜歡的,我在他們身上看到很多激情

 11。2一些招聘經驗
 介紹下招聘的一些經驗,這些經驗未必好用,咱們都是學計算機的,或許計算機專業上相
對比較實用。
 11。2。1技術面試經驗
 1。我個人認爲你發揮的好壞很大程度上取決於你的面試人,如果遇到一個好的面試管,
你的發揮可能是200%,遇到一個不好的面試官可能是-200%。
 好的面試官問問題由淺入深,由普遍到特別,這樣你答題時有逐步適應的過程,開始問你
些簡單的,讓你對自己有信心,不至於慌張,而有些面試官面試時特別叼專,一開始很特
別的問題,或者很難的問題問你,最難對付的是這些問題完全和他的個人經歷有關,不是
一個普遍性的,其實我們每個人經歷,即使再厲害的人也要有自己不會的問題,所以這樣
面試官誰碰到誰比較倒黴。
 2。對於有些問題,面試人知道你可能答不上,但他問你不是爲了讓你答上,而是讓你自
己能思考,起碼說出解決問題思路大概,即使思路可能錯誤他也未必在乎,看你是否感覺
接受這個問題,感覺自己去想這個問題,所以遇到不會的,不要放棄,起碼要想想,然後
說點。
 3。面試官可能問你比較擅長的問題,也就是你簡歷上寫的,但他不一定會,他問你就是
看你回答的流利程度,來判斷你是否真的做過這個。
 4。很多公司都會問一個問題是,如果讓你幹你不喜歡做的你該怎麼辦。回答就要委婉些
,說“幹個幾個月也沒什麼,公司調動很正常”,如果讓你幹一直幹下去,說實話這個就
要取決你自己,這個也是很棘手的問題,因爲如果你有自己主動方向,而且有很好的發展
,去幹一個自己不擅長的,發展上自己一定要考慮好,然後取捨。
 11。2。2 HR面試經驗
 
 一般如果技術相中你了,那麼HR面就是一個擺設,不會再刷人,基本就是了解下你的性格
什麼的。最關鍵的就是談待遇,很多公司他們都有一個基本標準,本科生有一個統一標準
,研究生有一個統一標準,不會給你提工資的。但相對大的 公司不會這樣,例如 完美 巨
人 qq 盛大 他們對每個人都有不同的等級,一般最大差別一年也就1W-2W。要薪水時,盡
管要,要你自己認爲你應該拿的,如果真想要你,他會和你商談,或者他當面就告訴,你
要高了,然後再協商。
 談待遇時一定要問清楚,戶口,補助,薪水支付情況,因爲年薪不等於月薪*12的,年薪
一般是一個目標,大於月薪*12,你能不能全拿到還要靠你自己,而月薪是死的,你幹好幹
壞一定能拿這些的,最後就是五險一金,最重要的就是住房公積金,每個地方給的份額是
不同的,自己加加算算應該最後能拿多少。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章