關(guān)于如何學(xué)好游戲3D引擎編程的一些經(jīng)驗(yàn)_第1頁(yè)
關(guān)于如何學(xué)好游戲3D引擎編程的一些經(jīng)驗(yàn)_第2頁(yè)
關(guān)于如何學(xué)好游戲3D引擎編程的一些經(jīng)驗(yàn)_第3頁(yè)
關(guān)于如何學(xué)好游戲3D引擎編程的一些經(jīng)驗(yàn)_第4頁(yè)
關(guān)于如何學(xué)好游戲3D引擎編程的一些經(jīng)驗(yàn)_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

這篇文章是我一年半前,找工作時(shí)候?qū)懙?,那時(shí)是發(fā)到學(xué)校的BBS上?,F(xiàn)在我工作了,想法和以前也有不同,但對(duì)游戲引擎編程理念還是基本差不多。在我沒(méi)遇到U3以前,一直研究WILDMAGIC,可以說(shuō)是GAMEBRYO的前身吧,他們基本框架都差不多,是完全面向?qū)ο?,代碼容易讀,但它發(fā)展存在嚴(yán)重的弊端,這個(gè)也是它為什么不是牛B引擎的原因。但從渲染和動(dòng)畫(huà)方面來(lái)看,U3的MATERIALTREE和ANIMTREEE是2個(gè)飛躍的,當(dāng)我對(duì)我自己引擎渲染材質(zhì)和光照一籌莫展的時(shí)候,MATERIALTREE帶來(lái)的希望。對(duì)比zfx(wildmagic)gamebryo和ogre還有U3,各有優(yōu)缺點(diǎn),而且你可以看到一個(gè)引擎發(fā)展,從一個(gè)以多邊形為渲染單元,變成以mesh做為渲染單元(現(xiàn)在很少有引擎場(chǎng)景管理分割多邊形來(lái)做的我始終喜歡zfx引擎,它是00-02之間的引擎,完全讓你可以理解那時(shí)候顯卡不是很強(qiáng)的時(shí)候,一個(gè)引擎應(yīng)該具備的特征。對(duì)于架構(gòu)來(lái)講,(wildmagic)gamebryo和ogre做的很好,u3的特點(diǎn)就是架構(gòu)亂,沒(méi)有什么可讀性的技術(shù)文檔,研究起來(lái)十分吃力。做為一個(gè)商業(yè)引擎,對(duì)于渲染方面,我認(rèn)為(wildmagic)gamebryo輸給了ogre,框架設(shè)計(jì)還有弊端,ogre確實(shí)是一個(gè)好引擎。而U3對(duì)于渲染過(guò)程,光照,陰影,就是一幀的渲染過(guò)程,處理的十分得當(dāng)。動(dòng)態(tài)生成shader是一個(gè)引擎的發(fā)展的必然趨勢(shì),而往往動(dòng)態(tài)生成最多的,也就是材質(zhì)和光照,它們不能分開(kāi),分開(kāi)談無(wú)意義,MATERIALTREE我始終認(rèn)為是個(gè)太好的想法了,任何特效不需要程序員過(guò)多參與,美術(shù)可以搞定一切,什么水,反射,折射,這些效果,編寫(xiě)起來(lái)易如反掌,還可以實(shí)時(shí)光看效果。其他動(dòng)態(tài)生成,也就是根據(jù)配置不同,來(lái)做處理,動(dòng)態(tài)編譯shader弊端太大,不能做到所有,而且不靈活,如果動(dòng)態(tài)生成和動(dòng)態(tài)編譯合起來(lái),簡(jiǎn)直牛B透頂了?,F(xiàn)在我的引擎已經(jīng)有了MATERIALTREE這個(gè)功能,ANIMTREEE在制作中。這里面我重點(diǎn)談的是圖形方面,略帶些動(dòng)畫(huà)方面,一個(gè)引擎最基本的是內(nèi)核,包含內(nèi)存管理,文件讀寫(xiě),資源管理等等吧,也十分重要,我的引擎這些寫(xiě)的都很簡(jiǎn)單,基本都是wildmagic里面的。我總結(jié)3D引擎編程的4個(gè)階段第一階段是了解3D原理和數(shù)學(xué)基礎(chǔ),大學(xué)里面學(xué)的線性代數(shù),概率統(tǒng)計(jì)和高等數(shù)學(xué)完全足夠,在3D中都有充分體現(xiàn)。最好自己能做一個(gè)軟引擎,這樣整個(gè)3D流水線自己完全可以掌控,然后在學(xué)DX之類(lèi)的API很容易。第二階段不要看引擎,還是應(yīng)該以實(shí)現(xiàn)各種效果和基本算法為基礎(chǔ),包括各種圖形特效,場(chǎng)景管理,剪裁算法,各種動(dòng)畫(huà)算法,等等,所有那些單一的算法,如果這些都不是了解很好,那么做引擎時(shí)引擎框架的接口也不會(huì)設(shè)計(jì)好!再添加這些算法和效果時(shí)會(huì)很困難,效率也不會(huì)很高。第三階段,就是看大量的引擎,對(duì)引擎有很深刻的概念,3D引擎只是引擎的一部分,引擎主要是框架,如果框架搭建好了,那么引擎的效率是很顯著的,其他底層細(xì)節(jié)優(yōu)化,也會(huì)有明顯的優(yōu)勢(shì)體現(xiàn)。第四階段,再好的引擎沒(méi)有成功的游戲支撐都是白費(fèi),你不僅僅是做引擎,而是做的有開(kāi)發(fā)價(jià)值的引擎,可以很好的為游戲服務(wù)的引擎。下面這段話寫(xiě)于一年半前~~前言本人不才,姑且以自己經(jīng)驗(yàn)來(lái)談如何學(xué)游戲編程,這個(gè)話題我醞釀了很久,它確實(shí)很難寫(xiě),因?yàn)槲乙膊皇琴Y深高手,才剛剛登堂入室,游戲編程大師功力一般都十幾年左右,所以讓我這樣的小卒寫(xiě)的深入淺出更何談容易,錯(cuò)誤出現(xiàn)并不奇怪,高手見(jiàn)笑也在所難免,請(qǐng)大家指正,我會(huì)欣然笑納。但這幾年走過(guò)的路,讓我知道這么學(xué)是正確的,大體過(guò)程經(jīng)驗(yàn)告訴我,這樣做是對(duì)的,高手的指引告訴我,這樣做是對(duì)的。這篇文章主要討論如何學(xué)習(xí)游戲圖形編程和游戲引擎編程,告訴沒(méi)有接觸游戲過(guò)編程或者現(xiàn)在關(guān)于怎么學(xué)好游戲編程還迷惑的PEOPLE所要走的方向,完全拋開(kāi)技術(shù)和代碼實(shí)現(xiàn)進(jìn)行談?wù)?。至于游戲邏輯這幾年重點(diǎn)沒(méi)有發(fā)到這個(gè)上面上,很難總結(jié)。經(jīng)驗(yàn)的限制,對(duì)于如何編寫(xiě)一個(gè)好的引擎(至于“好”這個(gè)詞都是相對(duì)而言,能做的滿意就是我所期望的),至今為止我還沒(méi)有這個(gè)能力,但我相信經(jīng)過(guò)我的努力,不久的將來(lái),我會(huì)實(shí)現(xiàn)這個(gè)愿望,因?yàn)槲业囊粋€(gè)愿望就是實(shí)現(xiàn)一個(gè)好的引擎。我從下面幾個(gè)方面來(lái)說(shuō)明如果學(xué)習(xí),記住只是如何學(xué)習(xí),要想學(xué)好就要靠你自己。1。你真的喜歡游戲編程嗎?2。要了解游戲編程3。學(xué)會(huì)讀書(shū),自學(xué)與思考,交流與合作4。游戲編程需要的基礎(chǔ)知識(shí)5。2D游戲編程6。3D游戲編程7。游戲引擎編程8。淺談?dòng)螒蛭锢砗虯I一。游戲編程,你真的愛(ài)她嗎?當(dāng)你聽(tīng)完我的介紹后,你就要決定游戲編程是否適合你。游戲編程可簡(jiǎn)單可復(fù)雜,簡(jiǎn)單的2D《蛇吃豆》,復(fù)雜的現(xiàn)在流行的3D游戲。咱們不說(shuō)簡(jiǎn)單的,因?yàn)槟悴幌雽W(xué)習(xí)游戲編程就為了做一個(gè)簡(jiǎn)單的游戲。確實(shí)每個(gè)人對(duì)他所向往的東西都想徹底了解清楚,可是我給你的第一個(gè)警告,復(fù)雜的3D游戲,復(fù)雜到難以想象。1你思想需要改變嗎?打開(kāi)話題,游戲是一個(gè)結(jié)合體,她是一個(gè)音樂(lè),美術(shù),技術(shù),創(chuàng)意相結(jié)合的藝術(shù)品,你要用藝術(shù)的眼光去欣賞的,因?yàn)楹玫挠螒蚴怯盟囆g(shù)的眼光來(lái)設(shè)計(jì),除了某國(guó)的網(wǎng)游不算外,很多經(jīng)典的游戲流芳百世,成為真正游戲玩家佳話。中國(guó)的游戲?yàn)槭裁催@么落后,你要聯(lián)想下,當(dāng)年中國(guó)為什么會(huì)被八國(guó)聯(lián)軍所侵略。腐朽的思想是根本原因,從而導(dǎo)致了腐朽的社會(huì)制度。游戲行業(yè)也是這樣,看待游戲的中國(guó)人,始終帶著眼鏡,用腐朽思想看待游戲,所以現(xiàn)在出現(xiàn)腐朽的游戲行業(yè),導(dǎo)致中國(guó)游戲發(fā)展緩慢,有人曾經(jīng)說(shuō)中國(guó)游戲不久就趕超日本和美國(guó),我認(rèn)為是扯淡,而且不是一般的扯淡,具體原因后面我會(huì)詳細(xì)說(shuō)明。從小的時(shí)候,國(guó)外的電子游戲產(chǎn)品就跑進(jìn)了我的空間,廢寢忘食的玩?zhèn)€沒(méi)玩,因?yàn)榈⒄`學(xué)習(xí),從此電子游戲被老師和家長(zhǎng)全部封殺,任何事物都有利有弊,魯迅的《拿來(lái)主義》曾說(shuō)過(guò)“去其糟粕,取其精華”。在中國(guó),電子游戲被視為過(guò)街老鼠。確實(shí)要承認(rèn)電子游戲有負(fù)面影響,但這些負(fù)面影響是誰(shuí)產(chǎn)生的,本質(zhì)上是我們自己,最后本來(lái)是精華的東西從我們身邊擦肩而過(guò),從小霸王以后的國(guó)外游戲機(jī)沒(méi)有任何仿造,導(dǎo)致了游戲機(jī)技術(shù)從此斷代,現(xiàn)在卻又想起來(lái)趕超。而現(xiàn)在,國(guó)人知道努力了,國(guó)家看到有錢(qián)可賺開(kāi)始支持了,腐朽的游戲思想?yún)s還在蔓延,網(wǎng)絡(luò)游戲就是這樣環(huán)境下成長(zhǎng)的新生兒,國(guó)內(nèi)網(wǎng)絡(luò)游戲每年要大批量生產(chǎn),但存活的基本沒(méi)幾個(gè)。不能否定,沒(méi)有利益的事情沒(méi)人干,但你還不能否定,有些事情即使沒(méi)有利益,但還是有人干,哪怕知道自己并不能得到什么。國(guó)內(nèi)的人,很少是第2種人,他們把游戲做為賺錢(qián)voidprint(S){cout<<S;}這里只是偽代碼,只是表示這個(gè)意思。你首先要找出PRINT這個(gè)單詞,讀入到一個(gè)buffer1,然后把參數(shù)讀入buffer2if(buffer1==PRINT)print(buffer2);這里段代碼其實(shí)就是一個(gè)軟件CPU,它負(fù)責(zé)虛擬運(yùn)行PRINTS這個(gè)指令。那么游戲中為什么要用腳本呢!最簡(jiǎn)單解釋就是靈活性好。拿一個(gè)RPG游戲例子來(lái)說(shuō),游戲中有大量物品,每個(gè)物品有大量的屬性,如果我把這些屬性值直接寫(xiě)到游戲中,每一個(gè)小小的改變就要編譯整個(gè)游戲,花費(fèi)很多時(shí)間,靈活性很差。如果我把這些寫(xiě)到一個(gè)文件中,用腳本語(yǔ)言來(lái)編輯,只需要編譯腳本文件就可以了,當(dāng)然如果你腳本是解釋型的語(yǔ)言,不用編譯直接可以運(yùn)行。當(dāng)然腳本還有很多好處,主要目的還是方便性和靈活性。其實(shí)GUI(圖形用戶接口)是一個(gè)重要部分。3D游戲中,出現(xiàn)的是大量的3D模型,這些模型是先用文件的形式存放好的,而文件里面包括的是3D數(shù)據(jù)和這些數(shù)據(jù)的組織方式。至于數(shù)據(jù)怎么組織是你引擎要規(guī)定好的,這樣也方便讀取,最后把3D數(shù)據(jù)加載到內(nèi)存?,F(xiàn)在問(wèn)題是3D數(shù)據(jù)上,我們?cè)趺茨苡行У牡玫竭@些3D模型的數(shù)據(jù),手工寫(xiě)進(jìn)文本里?我靠,那是奴隸社會(huì),SB的做法。我想你不會(huì)這么做。人類(lèi)很聰明,這就是為什么人把其他動(dòng)物關(guān)進(jìn)籠子里,而不是其他動(dòng)物把人關(guān)進(jìn)籠子里的原因。既然我們很聰明,就要想一個(gè)辦法快速的定義3D數(shù)據(jù),然后保存成文件。這樣一個(gè)3D編輯器就產(chǎn)生了。3D編輯器就是類(lèi)似于3DMAX那種,但引擎中的編輯器是有特殊目的的,使用者要按照引擎指定要求編輯3D數(shù)據(jù),這樣引擎高效的顯示和處理數(shù)據(jù)比較容易,至于3D數(shù)據(jù)是怎么組織的,是一個(gè)設(shè)計(jì)上的問(wèn)題,由你引擎來(lái)決定,設(shè)計(jì)好壞,決定你引擎加載數(shù)據(jù)是否容易,關(guān)系到最后渲染。所以一般好的游戲引擎都有自己GUI,但你也可以用3DMAX這樣的軟件,然后讀3DMAX文件變成自己可以利用的數(shù)據(jù)形式。說(shuō)到這里,不知道上面的概念大家是否理解,我想如果你沒(méi)接觸過(guò)引擎,可能真的不理解。其實(shí)我很難用簡(jiǎn)短的語(yǔ)言把這么復(fù)雜的問(wèn)題說(shuō)清楚,如果有一天你把3D學(xué)的融會(huì)貫通,你發(fā)現(xiàn)我說(shuō)的是對(duì)的。我不知道大家是否發(fā)現(xiàn)一個(gè)共性的問(wèn)題,有時(shí)你讀一本書(shū),無(wú)論你怎么認(rèn)真把它看完一遍,你都很難掌握里面的知識(shí),當(dāng)你再認(rèn)真看第二遍的時(shí)候,你突然覺(jué)得這本書(shū)沒(méi)有第一次看那么晦澀難懂。有些知識(shí)都是前后呼應(yīng)的,它們之間相互聯(lián)系,要想完整的理解它們?nèi)币徊豢?。游戲編程的知識(shí)也是這樣。我前面介紹的如果你看懂了,那你perfect,如果你沒(méi)有看懂,也不要灰心,這里介紹的只是一個(gè)大綱,讓你對(duì)游戲編程有一個(gè)了解,最基礎(chǔ)層面的了解。三。游戲編程,你準(zhǔn)備好了嗎?這個(gè)部分講解如果你想開(kāi)始游戲編程應(yīng)該具備那些基礎(chǔ)知識(shí),這樣你才能接下來(lái)游戲編程學(xué)習(xí),當(dāng)然下面的有些知識(shí),我開(kāi)始學(xué)習(xí)游戲編程時(shí),也不是都具備,但這些知識(shí)都是很容易學(xué)的知識(shí),如果你基礎(chǔ)好,在游戲編程中隨時(shí)學(xué)就可以,不耽誤你學(xué)習(xí)游戲編程的進(jìn)度。我在這段最后會(huì)指出那些是必須掌握的,因?yàn)檫@些知識(shí)如果你在游戲編程時(shí)學(xué)習(xí)再學(xué),時(shí)間上真的不允許。1。書(shū),永遠(yuǎn)是你的好朋友!書(shū),是你了解她最直接途徑,當(dāng)然我說(shuō)的書(shū)還包括所有游戲編程資料。書(shū),有好有壞,想要深刻了解她,你必須挑選精妙的好書(shū),而且還有循序漸進(jìn)的,合理次序的去讀它們。游戲編程書(shū)籍大量風(fēng)起云涌的出現(xiàn)是在2000年以后,當(dāng)然2000以前也有,只是很少一部分,從2000或者以前開(kāi)始就研究3D游戲的中國(guó)大哥們,現(xiàn)在可以說(shuō)是現(xiàn)在中國(guó)游戲行業(yè)的鼎梁支柱?,F(xiàn)在出版有關(guān)游戲方面的書(shū)籍大約有200左右本,中國(guó)人自己原著的書(shū)幾乎沒(méi)有,大多數(shù)都是翻譯國(guó)外的,就有幾本翻譯的質(zhì)量很好(翻譯大哥大姐確實(shí)很辛苦,我承認(rèn)這點(diǎn),但拜托你們翻譯前要看懂再翻譯,否則望文生義,不如讓我們自己看英文原版)要么自己寫(xiě)的也是東挪西湊的,寫(xiě)出來(lái)估計(jì)是想騙錢(qián),誰(shuí)叫中國(guó)人這么老實(shí),這么好欺負(fù)了。其中大部分書(shū)籍是3D游戲的,3D游戲確實(shí)要比2D游戲難一個(gè)數(shù)量級(jí)別,如果你足夠聰明,其實(shí)這些書(shū)看個(gè)幾十本,寫(xiě)出一個(gè)在中國(guó)可以立足的3D引擎足夠了。但好象這樣聰明的人真的很少,有黃金的這個(gè)地方大家都知道,可是前往這塊寶地的道路太荊棘,很少有人走下來(lái)。書(shū),大家從出生時(shí)就接觸,學(xué)會(huì)讀書(shū),這四個(gè)字,很少有人能領(lǐng)會(huì),你看一本書(shū),要么否定,要么肯定,如果你還是很迷糊,要么是書(shū)寫(xiě)的不好,要么就是你知識(shí)水平層次有限,要么就是你根本沒(méi)學(xué)會(huì)讀書(shū)。我在這里只說(shuō)一句話“要讀好書(shū),思而不學(xué)則罔,學(xué)而不思則怠,溫故而知新”,我想高手很容易體會(huì)這句話。想要學(xué)好游戲編程,學(xué)會(huì)讀書(shū)是你要掌握的,也是你獲取知識(shí)最快的途徑,開(kāi)始時(shí),建議還是讀一些中文的游戲編程書(shū),因?yàn)橛螒蚓幊讨谐涑獯罅啃g(shù)語(yǔ)和名詞,沒(méi)有任何游戲編程概念的人,直接看英文,即使你是老外,我估計(jì)你看一會(huì)就會(huì)爬在書(shū)上,眼皮一關(guān),口水把它淹沒(méi)了??磿?shū)后,代碼一定要仔細(xì)讀,而且對(duì)于初學(xué)者一定要親自去實(shí)現(xiàn),這樣你才能加深理解,有時(shí)看書(shū)看不懂,一看代碼就全明白了?!凹埳系脕?lái)終覺(jué)淺,覺(jué)知此事必躬行”,我始終堅(jiān)信這句話,只有你經(jīng)歷了,你才能感受,就象你沒(méi)有失去過(guò),就不會(huì)知道珍惜是什么東西。我相信既然你都看到這里了,就應(yīng)該知道我上面為什么給你打好的警鐘??赐陼?shū),就要寫(xiě)代碼,最好不要一味的效仿,要有你自己的獨(dú)道之處,這樣才說(shuō)明你認(rèn)真考慮了這個(gè)問(wèn)題,你也真正了解了,這個(gè)問(wèn)題是什么,應(yīng)該怎么解決,怎么解決最有效果。E文書(shū),以后就要是你老婆(同性戀除外),天天都要見(jiàn)面,除非你離婚了,也就是游戲編程這個(gè)愛(ài)情你不想要了,你提前離開(kāi)了這個(gè)努力走到最后才能見(jiàn)到美好果實(shí)的幸福家庭。中文翻譯一般都很慢,中文翻譯出來(lái),國(guó)外這個(gè)技術(shù)基本過(guò)時(shí)了,而且有能力翻譯的人本來(lái)就少,有時(shí)間干這事的說(shuō)他有病,也不足為奇,因?yàn)榉g一本太浪費(fèi)時(shí)間了。所以要適應(yīng)去看E文,現(xiàn)在沒(méi)錢(qián),就看電子的,很多國(guó)外新書(shū),沒(méi)有電子的,但電子的夠我們初學(xué)的人玩很長(zhǎng)時(shí)間,等有錢(qián)了,就直接去買(mǎi)國(guó)外正中的洋版,然后弄到家中,天天啃,工作時(shí)也啃,人家都會(huì)說(shuō)你很有激情的??措娮拥娜绻e麻煩,就打印下來(lái),打印下來(lái)還是花不了幾個(gè)鋼幣的,和買(mǎi)一本中文差不多(大家不要哭窮,一本好書(shū)100元我認(rèn)為很值得,里面技術(shù)如果你掌握了,你想想,大把大把的票子就進(jìn)你口袋里,很多人買(mǎi)來(lái)不看,天天還抱怨書(shū)貴。)這幾年來(lái),我讀過(guò)很多游戲編程方面的書(shū),中文的基本都讀過(guò)了,現(xiàn)在我一直在讀E文書(shū),有時(shí)到覺(jué)得看中文有些不適應(yīng),還有好多好書(shū),我還沒(méi)有讀。讀E文書(shū)時(shí),如果沒(méi)讀懂,自己一定要去網(wǎng)上查查相關(guān)資料,然后集中精力把它弄懂,現(xiàn)在很少有看不懂的E文游戲編程書(shū)(知道我6級(jí)沒(méi)過(guò)的,別用磚仍我),有些還是看不懂,確實(shí)自己水平有限,但不是因?yàn)橛⒄Z(yǔ)問(wèn)題,關(guān)于高深而復(fù)雜數(shù)學(xué)問(wèn)題,即使翻譯成中文,我也很難看明白。我在后面會(huì)把所有好的游戲編程書(shū)籍都列出來(lái),告訴大家那些可以買(mǎi)到,那些只有電子的。不好的書(shū),我就不列出來(lái)了,只會(huì)浪費(fèi)大家以后的時(shí)間。2。游戲編程所需要的基礎(chǔ)知識(shí)我這里介紹下要做一個(gè)好的,稱(chēng)職的,游戲程序員所需要。學(xué)習(xí)就和蓋樓一樣,要想上層建筑牢固,你就要有堅(jiān)實(shí)的基礎(chǔ),我這里介紹的基礎(chǔ)是你從事游戲編程最基礎(chǔ),基礎(chǔ)的不能再基礎(chǔ)的東西。2。1數(shù)學(xué)數(shù)學(xué)是游戲中支柱,沒(méi)有了它,任何都不要談,在你編寫(xiě)你游戲的時(shí)候,你就會(huì)知道,世界抽象成一堆數(shù)學(xué)是多么的神奇,突然你會(huì)覺(jué)得以前枯燥無(wú)味的數(shù)學(xué)現(xiàn)在是一頓大餐,但這個(gè)是霸王餐。國(guó)外人寫(xiě)關(guān)于引擎方面書(shū)的人,都可以說(shuō)是數(shù)學(xué)高手,他們理論和實(shí)踐都很厲害,讓我崇拜的不得了。大學(xué)里是你學(xué)好數(shù)學(xué)的最好機(jī)會(huì),一定要弄明白它的現(xiàn)實(shí)意義,任何理論都不是憑空出來(lái)的,它一定有現(xiàn)實(shí)基礎(chǔ),這個(gè)現(xiàn)實(shí)基礎(chǔ),就可以幫助你很好理解這個(gè)理論。2。1。1高等數(shù)學(xué)——微積分理論在游戲引擎中,很多游戲特效都是通過(guò)微積分方程來(lái)解得的,高度仿真是現(xiàn)在游戲的追求,真實(shí)感越強(qiáng)就需要越多的計(jì)算量。極限,一元微積分,多元微積分,級(jí)數(shù),微分方程等等在游戲圖形圖象和物理上都有明顯體現(xiàn)。有時(shí)一個(gè)碩士或者一個(gè)博士為了擬真一個(gè)效果要花費(fèi)幾個(gè)月或者幾年的時(shí)間,做為一個(gè)游戲程序員,微積分到達(dá)什么層次我很難給出定義,但起碼如果別人給出了原理我們能看明白,并把它實(shí)現(xiàn),我覺(jué)得就很可貴了。2。1。2線性代數(shù)和空間解析幾何在大學(xué)課本中,空間解析幾何是放在高等數(shù)學(xué)書(shū)里面講的,但游戲中,它和線性代數(shù)放到一起我認(rèn)為更加合適。線性代數(shù)所有知識(shí)都要掌握,在游戲中它們比微積分體現(xiàn)的更淋漓盡致,理解上我個(gè)人認(rèn)為相對(duì)微積分更容易??臻g解析幾何主要講向量,平面,線,體,這些東西并通過(guò)線形代數(shù)矩陣進(jìn)行空間變換,最后達(dá)到游戲想要的目標(biāo)。2。1。3四元數(shù)這個(gè)在大學(xué)里面不學(xué)數(shù)學(xué)的,估計(jì)很少有人接觸,它也是來(lái)用來(lái)變換空間,理解起來(lái)不是那么容易,但最常用的就是用四元數(shù)來(lái)表示旋轉(zhuǎn)。我這里只是一概而過(guò),上面任何知識(shí)在游戲中都有應(yīng)用,但大學(xué)里的數(shù)學(xué)不是為了游戲而開(kāi)設(shè)的,所以和游戲中用的數(shù)學(xué)在知識(shí)分列和講解上還是有很大差異,尤其是線性代數(shù)和空間解析幾何,不用擔(dān)心,我在后面介紹給大家一些好的游戲書(shū)籍,對(duì)大家學(xué)習(xí)游戲編程和有幫助的。2。2語(yǔ)言編寫(xiě)游戲c和c++是你首選,相對(duì)來(lái)講C++是你更應(yīng)該掌握的。2。2。1其他語(yǔ)言為什么不是當(dāng)今流行的編寫(xiě)游戲程序語(yǔ)言?VB,JAVA,C#,等等其他語(yǔ)言,并不是說(shuō)它們不能做游戲,它們能做,由于語(yǔ)言本身設(shè)計(jì)機(jī)理的限制,只能做一些對(duì)游戲速度要求低的游戲,對(duì)于運(yùn)行速度要求高的游戲,它們被判成死刑。當(dāng)然這個(gè)也取決于硬件的發(fā)展,以前8bitFC游戲都用C語(yǔ)言和匯編來(lái)寫(xiě),現(xiàn)在由于硬件速度提高,用VB,JAVA,C#來(lái)寫(xiě)這些游戲運(yùn)行也是可以的,例如現(xiàn)在興起的WebGame(網(wǎng)頁(yè)游戲)。但如果你真想做游戲的話,你一定想要了解現(xiàn)在最流行游戲編寫(xiě),C和C++是你最好的選擇,也是你走上真正的游戲編程道路的重要武器。2。2。2C和C++應(yīng)該選擇那一個(gè)?C和C++,這里面我還要說(shuō)一說(shuō),我個(gè)人更看好C++。大家都知道C是面向過(guò)程的,而C++是面向?qū)ο蟮?,雖然C++的面向?qū)ο筇匦赃€不是很完善,但出于對(duì)大型軟件設(shè)計(jì)上的考慮,因?yàn)橛螒蛞媸谴蟮墓こ?,框架設(shè)計(jì)遠(yuǎn)遠(yuǎn)要比編程重要,一般框架設(shè)計(jì)用面向?qū)ο蠓绞礁苯樱訡++比C更有優(yōu)越性性,而且如果你合理用好C++,并不見(jiàn)得C++比C速度慢。有時(shí)一個(gè)軟件架構(gòu)和軟件運(yùn)行上問(wèn)題,很難取舍,對(duì)于大應(yīng)用程序來(lái)說(shuō),都是一點(diǎn)點(diǎn)犧牲速度來(lái)獲得好的架構(gòu),是利大于弊的事情,這里確實(shí)體現(xiàn)軟件工程的重要性質(zhì)。2。3。3匯編,很重要嗎?匯編語(yǔ)言也是你要掌握的,你說(shuō)你語(yǔ)言學(xué)的好,但卻不會(huì)匯編,是一個(gè)天大的笑話?,F(xiàn)在很少有匯編高手能寫(xiě)出比編譯器優(yōu)化出來(lái)的匯編代碼運(yùn)行效率要高,因?yàn)檎Z(yǔ)言的不同,思考問(wèn)題的方式就會(huì)有不同,就象最早紙帶機(jī)上的原語(yǔ)言一樣(可計(jì)算性與計(jì)算復(fù)雜性就講這東西)。如果游戲都用匯編來(lái)寫(xiě),寫(xiě)代碼效率很低,所以我們都用高級(jí)語(yǔ)言來(lái)寫(xiě),同時(shí)還要與底層有密切聯(lián)系的,C和C++擔(dān)任大部分工作量。對(duì)于游戲速度頻頸問(wèn)題,有時(shí)我們用C和C++即使優(yōu)化很多,代碼精簡(jiǎn)很多,算法也改良很多,但由于語(yǔ)言本身設(shè)計(jì)上問(wèn)題,和高效匯編來(lái)編寫(xiě)還是有不同的,這時(shí)就要是匯編高手來(lái)做速度最快,內(nèi)存和寄存器使用最少匯編程序。所以匯編還是很重要的。2。3。4其他CPU硬件指令這里只是說(shuō)INTER和AMDCPU都支持的指令集,也是最常用指令集。MMX和SSESSE2是游戲編程中最常用的指令集,這個(gè)指令集是SIMD(singleinstructionmultipledata),也就是單指令多數(shù)據(jù)流指令集,一個(gè)指令可以處理多個(gè)數(shù)據(jù)流運(yùn)算。匯編CPU指令,一個(gè)指令只能執(zhí)行一個(gè)數(shù)據(jù)流運(yùn)算。例如:匯編中ADDEAX,EBX這是一個(gè)加法指令,EAX,EBX是寄存器,是32位的。這個(gè)指令就是EAX=EAX+EBX。這個(gè)過(guò)程只有一個(gè)數(shù)據(jù)流相加。而SIMD思想是,如果現(xiàn)在有2個(gè)指令A(yù)DDEAX,EBXADDECX,EDX能不能讓他們一起執(zhí)行?所以SIMD指令提供這樣的功能,他用很大的寄存器,前一部分裝EAX值,后一部分裝ECX值,再用一個(gè)寄存器,前一部分裝EBX,后一部分裝EDX.SIMD寄存器分成2部分[1部分][2部分]SIMDADD指令積存器1,積存器2運(yùn)算過(guò)程為寄存器1[1部分]=寄存器1[1部分]+寄存器2[1部分];寄存器1[2部分]=寄存器1[2部分]+寄存器2[2部分];這2個(gè)運(yùn)行是在一個(gè)SIMD積寄存器用硬件來(lái)執(zhí)行ADD同時(shí)運(yùn)行的。這里只是說(shuō)了SIMD思想,現(xiàn)在簡(jiǎn)單介紹下MMX,SSE,SSE2。MMX寄存器是32位的,所以它可以執(zhí)行4個(gè)8bit數(shù)據(jù)同時(shí)運(yùn)算,也可以執(zhí)行2個(gè)16bit數(shù)據(jù)同時(shí)運(yùn)算,具體要看使用哪個(gè)指令,在早期沒(méi)有SSE指令時(shí),就用MMX,但MMX有缺點(diǎn),它和FPU(浮點(diǎn)運(yùn)算單元,專(zhuān)門(mén)執(zhí)行浮點(diǎn)數(shù)運(yùn)算)共用同樣寄存器,所以當(dāng)你指令有中斷,從浮點(diǎn)運(yùn)算跳到MMX運(yùn)算,要告訴CPU,從MMX跳到FPU也要告訴CPU,這樣數(shù)據(jù)要臨時(shí)保存,降低了處理速度。早期2D游戲經(jīng)常用這個(gè)?,F(xiàn)在SSE,SSE2有自己?jiǎn)为?dú)的寄存器可以使用,而且它們是128位的,支持4個(gè)32位整數(shù)或者浮點(diǎn)數(shù)同時(shí)運(yùn)算。這些指令都沒(méi)有分支,所以使用時(shí)效率要我們掌握,因?yàn)閳?zhí)行都是并行的,一個(gè)指令完成多個(gè)計(jì)算,所以即使你編寫(xiě)SIMD代碼很差,速度也會(huì)提高幾倍,游戲中經(jīng)常用SIMD處理顏色和數(shù)學(xué)運(yùn)算問(wèn)題。在游戲速度瓶頸地方用這樣的代碼,公德無(wú)量。2。3。5ASMSHADER語(yǔ)言和高級(jí)SHADER語(yǔ)言開(kāi)始學(xué)游戲編程時(shí),這個(gè)知識(shí)不一定要具備,因?yàn)槟悴涣私?D流水線內(nèi)部細(xì)節(jié)學(xué)起來(lái)還是比較困難,所當(dāng)你做完“軟引擎”了解3D流水線,在學(xué)這個(gè)語(yǔ)言很容易,接下來(lái)的語(yǔ)言發(fā)揮,就靠你自己了。早期的游戲,所有的圖形圖象處理基本都由CPU來(lái)完成,然后把處理完的數(shù)據(jù)傳到顯存,用顯卡來(lái)顯示?,F(xiàn)在的設(shè)計(jì)理念盡量解放CPU,把與圖形圖象有關(guān)的運(yùn)算用顯卡來(lái)完成。但早期顯卡只支持固定流水線,所謂的固定流水線就是所有3D數(shù)據(jù)處理過(guò)程都是事先用硬件實(shí)現(xiàn)好的,這個(gè)過(guò)程是一個(gè)大過(guò)程,里面封狀了很多小過(guò)程細(xì)節(jié),用戶只需要輸入數(shù)據(jù),顯卡負(fù)責(zé)輸出數(shù)據(jù),至于用戶無(wú)法干預(yù)這個(gè)大過(guò)程,小過(guò)程更是接觸不到。再說(shuō)的通俗一點(diǎn),一個(gè)空間3D三角形要想顯示到計(jì)算機(jī)屏幕上,基本要經(jīng)歷2個(gè)大過(guò)程,頂點(diǎn)處理和象素處理,頂點(diǎn)處理封狀了很多空間變換的小過(guò)程,象素處理包括象素混合小過(guò)程。這個(gè)過(guò)程是不可以訪問(wèn)的,我們只能通過(guò)顯卡提供的接口來(lái)控制,而且改變方式很單一。(剛接觸這些可能不明白,現(xiàn)在你知道的不用太詳細(xì),就知道大過(guò)程是不可以干預(yù)的就可以了,或者是只有很少一部分可以干預(yù))為了讓圖形圖象處理更加完善話,讓人們可以參與到整個(gè)3D流水線中,實(shí)現(xiàn)更多豐富的效果,顯卡開(kāi)始出現(xiàn)GPU單元(圖形處理單元),這時(shí)的3D流水線從固定流水編成了可編程流水線,有了早期的GPU指令,大家都稱(chēng)為SHADER指令,也就是ASMSHADER,和匯編一樣,這些指令都是和GPU指令一一對(duì)應(yīng)的,隨著硬件更新,GPU越來(lái)越強(qiáng)大,支持指令越來(lái)越多,ASMSHADER從1。0到1。4,到現(xiàn)在3。0版本。由于ASMSHADER用起來(lái)不方便,就象我們用匯編寫(xiě)程序一樣,所以又出現(xiàn)了高級(jí)SHADER語(yǔ)言,有DirectX3D下支持HLSL(highlevelshaderlanguage)和OPGL下支持的GLSL(openglshaderlanguage)這些語(yǔ)言都是面向過(guò)程。由于硬件設(shè)計(jì)限制,這些語(yǔ)言不能象C語(yǔ)言那樣隨意使用,SHADER語(yǔ)言有自己的使用規(guī)范,大家學(xué)習(xí)時(shí)一定要弄明白3D流水線內(nèi)部實(shí)現(xiàn)過(guò)程,再使用SHADER簡(jiǎn)直很容易。還有一個(gè)要說(shuō)的是,GPU現(xiàn)在還不支持分支預(yù)測(cè),但GPU編程語(yǔ)言現(xiàn)在已經(jīng)提供了豐富的條件判斷,條件判斷還是會(huì)影響到速度的。重點(diǎn)你要掌握的是,數(shù)學(xué),c和c++,匯編,數(shù)據(jù)結(jié)構(gòu),基本掌握的是計(jì)算機(jī)體系結(jié)構(gòu),離散數(shù)學(xué),編譯原理,計(jì)算機(jī)網(wǎng)絡(luò),操作系統(tǒng),軟件工程,數(shù)據(jù)庫(kù),人工智能??梢哉f(shuō)這些是計(jì)算機(jī)最基礎(chǔ)的學(xué)科,你只有掌握了它們,無(wú)論你專(zhuān)研計(jì)算機(jī)哪個(gè)領(lǐng)域,你的基礎(chǔ)都是足夠的,游戲編程中這些學(xué)科都可以用到,我們不用每個(gè)學(xué)科都精通的要命,我們要精通的是游戲編程,也就是接觸到和游戲相關(guān)的,我們有這些基礎(chǔ)完全可以看懂,然后我們?cè)谟米约簳r(shí)間來(lái)去專(zhuān)研這些學(xué)科在游戲領(lǐng)域的應(yīng)用。四。游戲編程,她的大門(mén)已經(jīng)為你打開(kāi)。1。顏色之迷計(jì)算機(jī)怎么顯示圖形的,這個(gè)你必須要弄明白,計(jì)算機(jī)顯示彩色圖象是經(jīng)歷了一個(gè)什么樣的發(fā)展過(guò)程。1。1象素和屏幕顯示點(diǎn)計(jì)算機(jī)顯示一個(gè)圖象是由象素組成,我們通常說(shuō)的分辨率就是屏幕上顯示多少個(gè)象素。如果一個(gè)屏幕最大可以支持1024*768那么它也可以支持800*600,當(dāng)你屏幕分辨率是800*600時(shí),一個(gè)象素占據(jù)了屏幕多個(gè)屏幕顯示點(diǎn),也就是說(shuō),只有當(dāng)你分辨率調(diào)節(jié)到最大時(shí),屏幕顯示點(diǎn)和象素點(diǎn)才是一一對(duì)應(yīng)的,至于一個(gè)象素占據(jù)多個(gè)屏幕顯示點(diǎn)后顏色怎么顯示這個(gè)是硬件的事,我也不是很了解。象素都是2進(jìn)制存儲(chǔ),然后由硬件根據(jù)顯存中當(dāng)前象素值,根據(jù)顏色顯示模式的設(shè)定,來(lái)顯示指定顏色。1。2顏色組成和模式計(jì)算機(jī)要顯示顏色,每個(gè)象素都有自己的顏色,通常顏色有3種模式,一個(gè)是調(diào)色板模式,一個(gè)是16bit模式,一個(gè)是32bit模式,我這里說(shuō)的通常,早期也有4bit模式,我要講出里面的細(xì)節(jié),讓看的人真正理解,不是死記硬背,你就會(huì)發(fā)現(xiàn)實(shí)質(zhì)上只有2種模式,一個(gè)是調(diào)色版模式和bit顯示模式。我先介紹位顯示模式,從4bit開(kāi)始,早期顏色顯示很單調(diào),硬件只支持16個(gè)顏色,當(dāng)然這16個(gè)可以是黑白的,也可以是彩色的。總之硬件就支持16個(gè)顏色。所以用4bit表示4bit2進(jìn)制正好可以代表16個(gè)。隨著硬件發(fā)展支持的顏色越來(lái)越多,發(fā)展到16bit,16bit開(kāi)始有了嚴(yán)格限制,顏色是有三種色彩基元組成,也就是紅綠藍(lán),人送江湖稱(chēng)號(hào)RGB,16bit分成1555格式和565格式,1555就是1位給ALPHA(表示透明)分給RGB分別5bit,5bit可以表示色彩基元顏色是32種,RGB組合起來(lái)就是15bit,就是2的15次方,可以表示很多顏色了。而565格式?jīng)]有ALPHA位置,直接分給RGB位數(shù)為565,也就是綠色多了一位,傳說(shuō)中,專(zhuān)家說(shuō)人眼對(duì)綠色明感,所以給綠色多分了一位。而32bit分給ALPHA和RGB分別是8888,每個(gè)都是8bit。其實(shí)標(biāo)準(zhǔn)的顏色都是每個(gè)分量都是8bit,每個(gè)色彩基元都是256種,而16bit模式不能顯示出真實(shí)世界色彩。調(diào)色板模式一般都是針對(duì)每個(gè)分量是8bit,也就是顏色組成是32位的。調(diào)色板模式有一個(gè)映射表數(shù)組,這個(gè)映射表數(shù)組每個(gè)元素都存放的是32位的顏色,而顯存存放的是一個(gè)索引,但硬件讀出顯存當(dāng)前象素值時(shí),然后用這個(gè)值當(dāng)作索引去映射表數(shù)組里面查對(duì)應(yīng)的顏色,然后顯示到屏幕上。相比較而言,調(diào)色板模式是最早期的,例如早期FC8bit機(jī)每個(gè)象素只占8bit,只能表示256種顏色,而我們彩電可以表示很多顏色,為了節(jié)省顯存,增加處理速度,還顯示出多種顏色,F(xiàn)C用調(diào)色板模式,而我們想換顏色時(shí),其實(shí)只換調(diào)色板映射表數(shù)組某一個(gè)值就可以了,索引都不用變,畢竟索引是寫(xiě)在顯存中的,一般改寫(xiě)顯存還是速度很慢的。16bit模式也是在處理速度上,節(jié)省存儲(chǔ)空間上得以應(yīng)用。畢竟這些顯示模式都是為了應(yīng)付以前硬件速度太慢而設(shè)計(jì)的,現(xiàn)在一般都用32bit模式。而且無(wú)論顏色基元的數(shù)字越大表示這個(gè)基元顏色越淺。還有一個(gè)要說(shuō)的就是ALPHA,這個(gè)分量是表示透明度的,這個(gè)分量如果是8bit,那么它可以表示256種透明程度,255表示不透明,0表示完全透明。現(xiàn)在大家知道你設(shè)置屏幕或者游戲時(shí)1024*768*32什么意思了吧!每個(gè)象素占32bit,屏幕顯示1024*768個(gè)象素。1。3顏色的運(yùn)算計(jì)算機(jī)支持顏色運(yùn)算都是無(wú)符號(hào)顏色運(yùn)算,顏色沒(méi)有負(fù)數(shù),而且顏色運(yùn)算有CLAMP和MOD如果每個(gè)顏色占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)顏色加減都是向量加減,每個(gè)分量做加減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;顏色加法一般都用CLAMP1。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顏色加法和乘法在象素混合效果上經(jīng)常用,有時(shí)為了到達(dá)一個(gè)效果,加法和減法混合用,至于什么時(shí)候用加法,什么時(shí)候用乘法,沒(méi)有嚴(yán)格的規(guī)定,還是要看效果,一般對(duì)于全局光照模型顏色之間要用加法的,但其他光照模型可能不同,紋理混合或者紋理和顏色混合,加法和乘法都有各自用途。2。DirectxOpenGL到底用來(lái)干什么?這里只說(shuō)他們支持圖形和圖象部分,其他部分不說(shuō)。很多人都聽(tīng)過(guò)這2個(gè)名詞,其實(shí)他們是一個(gè)函數(shù)庫(kù),這個(gè)函數(shù)庫(kù)為我們做了一些最基本的和底層打交道的處理,其他它們還提供了一些常用的3D函數(shù)庫(kù),算是一個(gè)2次開(kāi)發(fā),其實(shí)2次開(kāi)發(fā)一般和底層沒(méi)有關(guān)系,所以在游戲引擎中很多都自己來(lái)做,微軟做了很多2次開(kāi)發(fā),可以算是一個(gè)引擎。我前面說(shuō)了,引擎沒(méi)有明確概念,只有適應(yīng)程度之分,用它這個(gè)提供的來(lái)做游戲,還是差很遠(yuǎn),做小游戲當(dāng)然沒(méi)問(wèn)題。我主要說(shuō)說(shuō)和底層打交道那部分,DX和OPGL最大功勞在于充分調(diào)度和發(fā)揮了顯卡性能,把顯卡的特性用接口的形式提供出來(lái),他們各自都有自己的管理層次,管理方法,管理管線,至于怎么管理,我也不是很清楚,但當(dāng)你使用和顯卡資源相關(guān)的API時(shí),你要仔細(xì)看這個(gè)函數(shù)各個(gè)參數(shù)說(shuō)明,它會(huì)根據(jù)你的指定,來(lái)管理顯卡。但他的管理只是一部分,還有很大一部分要引擎里面自己處理。如果你不想自己寫(xiě)驅(qū)動(dòng)的話,那么你還想控制顯卡,你就要用這些API,D3D(DX中主要處理3D的)和OPGL使用上還是有很大不同,所以學(xué)習(xí)他們也還要花費(fèi)一些時(shí)間。我當(dāng)初學(xué)習(xí)時(shí),由于不了解3D渲染流程,學(xué)起來(lái)特別困難,很難看懂,我就放棄了他的學(xué)習(xí),學(xué)習(xí)制作“軟引擎”(用CPU來(lái)實(shí)現(xiàn)顯卡提供的硬件功能),然后再學(xué)D3D,很容易的。有時(shí)后放棄是為了選擇更好的,并不是真正的放棄。至于學(xué)習(xí)D3D還是OPGL,我個(gè)人認(rèn)為無(wú)所謂的,但好象OPGL越更新越混亂,沒(méi)有DX那么清晰,我也是聽(tīng)別人說(shuō)的,畢竟我不是很了解OPGL。3。游戲編程中的常用術(shù)語(yǔ)游戲編程充著大量常用術(shù)語(yǔ),我不打算把它們都列出來(lái),實(shí)在太多,我想對(duì)于初學(xué)者是來(lái)說(shuō),我希望,你在學(xué)習(xí)游戲編程時(shí),自己多查下資料究竟這些術(shù)語(yǔ)都有什么含義,記住一定在學(xué)習(xí)游戲編程時(shí)去查,也就是說(shuō),針對(duì)問(wèn)題去查,而不是在沒(méi)有遇到任何問(wèn)題時(shí)去查。其實(shí)我們的教育有個(gè)弊端,任何知識(shí)我們學(xué)了,不知道怎么用。其實(shí)很多知識(shí)都是我們遇到問(wèn)題時(shí)再去查資料,去找解決方式,而不是在不知道這個(gè)解決方式用來(lái)解決什么的情況下嚇學(xué)。最好大家把這些術(shù)語(yǔ)的中文和英文名稱(chēng)看見(jiàn)都能知道是怎么回事,因?yàn)槟愕揭院罂从⑽臅?shū)時(shí),如果你知道這個(gè)術(shù)語(yǔ)的含義,看起來(lái)會(huì)很容易。五游戲編程中的2D游戲,你首先要做到的。通往神殿的第一個(gè)考驗(yàn)就是這個(gè),不知道你是否能走下來(lái),相信自己會(huì)成功,你的信念一定要不可動(dòng)搖,當(dāng)你走過(guò)這段路的時(shí)候,想想你現(xiàn)在所得到的,付出的其實(shí)不算什么。很多人可能會(huì)問(wèn),我想做3D游戲,2D游戲?qū)W它干什么。其實(shí)3D游戲處理可以分成2個(gè)部分,一個(gè)是3D空間數(shù)據(jù)處理,經(jīng)過(guò)紋理映射把象素寫(xiě)到屏幕緩沖,接下來(lái)其他特效處理都是歸結(jié)到2D問(wèn)題。所以你想真正了解游戲圖象處理過(guò)程,還是要學(xué)2D的。2D原理相對(duì)3D來(lái)說(shuō)簡(jiǎn)單很多,學(xué)起來(lái)也不是很難。我建議去看《WINDOWS游戲編程大師技巧》里面的代碼都讀明白,它用C語(yǔ)言實(shí)現(xiàn)一個(gè)小的游戲引擎,我希望你用C++封狀成類(lèi)的形式,重新按照自己規(guī)劃來(lái)實(shí)現(xiàn),最后做出個(gè)游戲。用引擎做出的游戲和直接做游戲還是有很大區(qū)別的,這樣你引擎也就符合引擎的概念,代碼重用性更強(qiáng)。這本書(shū)用的DirectX中DDraw接口來(lái)實(shí)現(xiàn)的,你一定要了解你使用的工具,它能用來(lái)干什么,它不能用來(lái)干什么,這樣你才能很好的游戲編程。如果你不了解C語(yǔ)言,怎么用C語(yǔ)言編程,都是一個(gè)道理的。我不想在過(guò)多詳細(xì)介紹DDraw為我們提供了什么特性,你自己去看書(shū)。2D游戲中,最常用的概念就是貼圖,把一個(gè)圖象貼到另一個(gè)上。2D游戲中一種處理模式是在各個(gè)圖片上的處理,還有就是在象素上的處理,其實(shí)這些都可以歸結(jié)到象素上的處理,象素處理,就是處理顯存數(shù)據(jù)。顏色模式,《WINDOWS游戲編程大師技巧》這本書(shū)講的很詳細(xì)。2D動(dòng)畫(huà)系統(tǒng),《WINDOWS游戲編程大師技巧》這本書(shū)沒(méi)有詳細(xì)介紹,但你看它的代碼,代碼寫(xiě)的很清楚而詳細(xì),你就知道的。GDI我不知道大家聽(tīng)說(shuō)過(guò)沒(méi)有,它是WINDOW自帶的圖形圖象接口,我希望大家也能了解下,當(dāng)時(shí)我是GDI和DDRAW一起學(xué)的,然后分別做了引擎,2個(gè)引擎接口也一樣,游戲移植非常容易。一個(gè)最重要的問(wèn)題就是調(diào)試,8BIT模式下的游戲,用編譯器帶的單步調(diào)式是不可能的,我機(jī)器死機(jī)N回。我現(xiàn)在也沒(méi)有發(fā)現(xiàn)好的辦法,最好的辦法就是自己做一個(gè)LOG日志系統(tǒng),把所有調(diào)式信息都寫(xiě)到文件里,用任務(wù)管理器把當(dāng)前程序關(guān)掉,然后看文件寫(xiě)的信息。2D游戲制作細(xì)節(jié)我沒(méi)有詳細(xì)介紹,畢竟我不是在講怎么制作2D游戲,我是講你應(yīng)該注意什么,怎么學(xué),我想《WINDOWS游戲編程大師技巧》會(huì)給你想要的一切。當(dāng)然我在學(xué)這本書(shū)前已經(jīng)有了一些2D游戲基礎(chǔ),以前用VB做過(guò)游戲,用GDI也做過(guò),所以學(xué)起來(lái)還算容易,如果你以前沒(méi)有任何游戲編程基礎(chǔ)就直接用DDraw,那么我希望你多下點(diǎn)工夫,把它制作游戲的流程都搞清楚,記住什么時(shí)候用自己的雙手做出了自己2D游戲,你才算2D游戲編程過(guò)關(guān)了。這本書(shū)仔細(xì)看吧!直到把它所有的精髓都掌握。還有一個(gè)要說(shuō)的就是,圖象處理常用算法,大家可以多看看圖象處理的書(shū),游戲中特效經(jīng)常用到,其實(shí)如果你真想一心搞3D,2D上做一個(gè)坦克大戰(zhàn)這樣的游戲就可以了,很多2D處理詳細(xì)東西,在學(xué)3D游戲時(shí),都可以接觸的。六。游戲編程中的3D游戲,考驗(yàn)?zāi)隳土陀職獾臅r(shí)候到了!前面你所遇到的一切都是小小測(cè)試,證明你有能力接受這個(gè)挑戰(zhàn),在3D游戲這個(gè)廣闊無(wú)垠的天地里,它比2D游戲更有讓你想象余地的空間,因?yàn)?D游戲不僅僅包括2D游戲所有,而且還包括很多其他東西。努力吧!朋友們,無(wú)論遇到什么挫折,都不要放棄,因?yàn)樗詈髸?huì)給你想要的。我不知道其他人學(xué)習(xí)3D游戲是一個(gè)什么樣的過(guò)程,這里我只介紹我自己的學(xué)習(xí)過(guò)程,因?yàn)槲沂菑拇鞌≈凶哌^(guò)來(lái)的。開(kāi)始學(xué)3D,腦袋里一片模糊,只有一點(diǎn)點(diǎn)大學(xué)里學(xué)的計(jì)算機(jī)圖形學(xué)相關(guān)的知識(shí),我不得不說(shuō)學(xué)校里講的計(jì)算機(jī)圖形學(xué)和游戲還是大相徑庭的。(這里允許我抱怨一下,國(guó)外很多大學(xué)都開(kāi)設(shè)了3D游戲編程的課程,而且很專(zhuān)業(yè),我看過(guò)老外的PPT。相對(duì)于國(guó)內(nèi),也有些,但不專(zhuān)業(yè),我說(shuō)游戲?qū)W院騙錢(qián)你不要打我,它確實(shí)能讓你找到工作,但你做的永遠(yuǎn)是下手,學(xué)不到底層的東西。我看過(guò)游戲?qū)W院開(kāi)設(shè)的課程,沒(méi)有一個(gè)是有技術(shù)含量的,用“外包”形容在貼切不過(guò)。道理也很簡(jiǎn)單,中國(guó)現(xiàn)在牛人很少,我說(shuō)搞引擎的高手全國(guó)有1000人都是保守的,真正能搞出名堂的,也不多于200人,這200人里面學(xué)習(xí)游戲編程經(jīng)驗(yàn)10年就很多了,中國(guó)3D游戲起步很晚,相對(duì)國(guó)外,中國(guó)人愛(ài)跳槽的習(xí)慣,讓任何公司都沒(méi)有技術(shù)積累,發(fā)展更是困難,所以人才積累的少,而且這些人都很忙,在加上現(xiàn)在學(xué)校教育約束,即使他們想去高校教授游戲課程也是不可能,何況人家都不愿意去,這樣中國(guó)積累的人才更少)所以你要系統(tǒng)學(xué)習(xí)游戲中圖形學(xué)理論。這里我經(jīng)歷了游戲?qū)W習(xí)編程一次比較大的挫敗,當(dāng)時(shí)自己是初學(xué)者,問(wèn)過(guò)很多人學(xué)3D,應(yīng)該從什么入手。很多人都說(shuō)從D3D開(kāi)始入手,于是我做了。我不得不說(shuō)的是,如果你不了解3D流水線過(guò)程,學(xué)D3D簡(jiǎn)直是看天書(shū),當(dāng)時(shí)我以為自己反復(fù)的看書(shū),寫(xiě)程序,最后會(huì)理解的,浪費(fèi)了我大量的時(shí)間,最后還是無(wú)法靈活掌握D3D,如果你無(wú)法掌握D3D,想做游戲可能真的很困難。我終于認(rèn)識(shí)到,我選擇的路是錯(cuò)誤的,那些所謂的高手難道就學(xué)D3D學(xué)過(guò)來(lái)的?那么他們花費(fèi)的時(shí)間是可想而知的。因?yàn)橛行┘?xì)節(jié)你無(wú)法掌握,你使用時(shí)就覺(jué)得匪夷所思?!?D游戲編程大師技巧》這本書(shū)是每個(gè)學(xué)3D的人都應(yīng)該看的,這本書(shū)把顯卡硬件實(shí)現(xiàn)的功能都用軟件來(lái)做,真正讓你理解一個(gè)3D東西到最后的屏幕顯示,是一個(gè)什么樣的過(guò)程。作者實(shí)現(xiàn)了一個(gè)軟引擎,軟引擎就是所有的3D功能都是用代碼自己寫(xiě)的,沒(méi)有用什么顯卡來(lái)做處理的引擎。這本書(shū)是一個(gè)經(jīng)典巨著,如果你想學(xué)3D,即使死也要把這本書(shū)弄明白,這樣不辜負(fù)作者寫(xiě)這本書(shū)留下的汗水,寫(xiě)一本書(shū),尤其這么PERFECT,太不容易了,國(guó)內(nèi)人翻譯的也很出色,感謝他們?!?D游戲編程大師技巧》繼承了《WINDOWS游戲編程大師技巧》里面2D函數(shù),然后3D功能以及流水線和引擎都是自己完成,這本書(shū)的代碼量要有十幾萬(wàn),我當(dāng)時(shí)用C++重新封裝了《3D游戲編程大師技巧》代碼,自己設(shè)計(jì)了一個(gè)面向?qū)ο蠊潭魉€模式,代碼量13W左右,這個(gè)過(guò)程很艱辛,這本書(shū)我看了2遍,最后一共零零散散花費(fèi)了大約9。10個(gè)月的時(shí)間。你會(huì)感覺(jué)你立刻升級(jí)了,HP,MP,CP都增長(zhǎng)了,當(dāng)然也包括RP,哈哈?。ú恢肋@些術(shù)語(yǔ)的,大家多玩玩RPG游戲吧?。┖脰|西去追求,不要怕浪費(fèi)時(shí)間,浪費(fèi)精力,你想想,你得到的最后會(huì)大于你的付出,這些都不算什么。很多人問(wèn)我怎么學(xué)3D,我建議他們不能著急,要從學(xué)《3D游戲編程大師技巧》開(kāi)始,大約要8,9個(gè)月時(shí)間,把每個(gè)細(xì)節(jié)都弄明白,閉上眼睛,怎么實(shí)現(xiàn)就很清楚,書(shū)上每一頁(yè)寫(xiě)什么都很明確。他們都覺(jué)得浪費(fèi)時(shí)間,那么這樣是永遠(yuǎn)學(xué)不好的13D數(shù)學(xué)是你要攻克的雖然你數(shù)學(xué)學(xué)的好,但國(guó)內(nèi)的教科書(shū)還是和游戲中用的有些不同,畢竟沒(méi)有上過(guò)專(zhuān)門(mén)講解游戲中數(shù)學(xué)知識(shí)的課程。這需要你系統(tǒng)學(xué)習(xí)游戲編程中數(shù)學(xué),3*3矩陣為什么有的人用,而有的人用4*4矩陣,為什么有的用矩陣轉(zhuǎn)置有的用矩陣的逆?!?D游戲編程大師技巧》這本書(shū)介紹的很詳細(xì),還有一本書(shū)就是《3D數(shù)學(xué)基礎(chǔ):圖形與游戲開(kāi)發(fā)》很不錯(cuò)(有中文的),先系統(tǒng)學(xué)習(xí)下,然后在學(xué)習(xí)游戲編程時(shí),不懂的時(shí)候,再回頭看看這些書(shū),把所有的東西都徹底弄清。你如果數(shù)學(xué)基礎(chǔ)好,學(xué)這些都很容易,以后游戲編程中最深?yuàn)W的地方之一就是數(shù)學(xué)?;旧衔铱偨Y(jié)下,你要知道的是:向量4維和3維向量有什么不同矩陣4*4和3*3矩陣有什么不同四元數(shù)ELUER角以后有機(jī)會(huì)深入研究碰撞中的各種算法,還會(huì)遇到很多關(guān)于數(shù)學(xué)的問(wèn)題,上面只是渲染有關(guān)系。23D流水線的實(shí)現(xiàn)過(guò)程我無(wú)法用言語(yǔ)來(lái)表明這個(gè)過(guò)程的重要性,整個(gè)3D流水線是是3D游戲的脊柱,你的基礎(chǔ)知識(shí)牢固與否,主要看你這里。3D流水線每一個(gè)細(xì)節(jié)我希望大家都要搞清楚,這個(gè)過(guò)程對(duì)初學(xué)者是要花費(fèi)大量的時(shí)間專(zhuān)研與琢磨,D3D的固定流水線都是由硬件完成,如果你的硬件不支持,它會(huì)用軟件模擬,好,關(guān)鍵就在這里,軟件模擬是怎么回事,而《3D游戲編程大師技巧》的流水線是自己用C語(yǔ)言寫(xiě)的,也就是用軟件完成,這樣你能了解整個(gè)流水線的細(xì)節(jié),同時(shí)你在學(xué)D3D時(shí),對(duì)照著來(lái)學(xué),你會(huì)發(fā)現(xiàn),D3D學(xué)起來(lái)很容易。現(xiàn)在D3D和硬件都支持可編程流水線,而且DX10沒(méi)有固定流水線,所有變換過(guò)程都用SHADER語(yǔ)言控制顯卡完成,這個(gè)過(guò)程是3D流水線的縮影,所以3D流水線的重要性是是可想而知的。我說(shuō)了這么多,3D流水線對(duì)你是一個(gè)新鮮的名詞,我也沒(méi)有去解釋它,我不想去解釋?zhuān)耆艚o你自己去,我始終堅(jiān)持著,我只告訴你去的路,路上有什么困難,應(yīng)該怎么走,你自己去體會(huì)這條路上的酸甜苦辣。我希望大家多花些時(shí)間在這上面,真真正正的自己寫(xiě)代碼實(shí)現(xiàn)一下,基礎(chǔ)對(duì)你真的很重要,記住我說(shuō)的話,很多人學(xué)習(xí)時(shí),認(rèn)為自己理解了,沒(méi)有去實(shí)現(xiàn),其實(shí)還是那句話“紙上得來(lái)終覺(jué)淺,絕知此事必躬行”,相信我,沒(méi)錯(cuò)的?;旧衔铱偨Y(jié)下,你要知道的是:3D中的頂點(diǎn)結(jié)構(gòu),每個(gè)分量都用來(lái)干什么,三角形是基本渲染單元。模型空間——》世界空間——》相機(jī)空間——》投影空間——》屏幕空間——》光柵化這個(gè)過(guò)程和運(yùn)行原理材質(zhì)究竟是什么?常用的宏光照模型原理,光源類(lèi)型光源和材質(zhì)和法向量關(guān)系光照在哪個(gè)空間去執(zhí)行(其實(shí)不是很?chē)?yán)格)紋理尋址,紋理映射方式,紋理混合,紋理過(guò)濾。1D2D3DCUBE紋理Z1/Z緩沖2種相機(jī)模型ALPHA透明關(guān)于光柵化三角形要特別注意,他最后混合紋理和光照顏色和ALPHA透明,還要判斷深度緩沖,最后是插值填寫(xiě)每個(gè)象素。3D3D究竟要如何學(xué)習(xí)《3D游戲編程大師技巧》和D3D流水線過(guò)程還是有些差別的,比如在投影矩陣上,其實(shí)它們都是大同小異,只不過(guò)表現(xiàn)形式不同,原理都一樣。我希望大家自己可以找出來(lái),深刻理解里面原理。還有一個(gè)重要的東西,就是哪些是D3D開(kāi)發(fā)游戲必須有的,哪些是D3D自己擴(kuò)展的。必須有的,就是同硬件打交道的部分,而D3D中自己擴(kuò)展了很多庫(kù)函數(shù),例如數(shù)學(xué)庫(kù),這個(gè)完全可以沒(méi)有,我們自己來(lái)實(shí)現(xiàn),還有D3D中的EFFECT接口,它自己定義的。X文件所有函數(shù)接口。也就是說(shuō),你要理解,哪些是游戲開(kāi)發(fā)中必須有的,哪些是游戲開(kāi)發(fā)中自己完全可以不接觸底層來(lái)實(shí)現(xiàn)的。游戲編程中有3個(gè)緩沖區(qū),顏色緩沖,深度緩沖,模板緩沖,前2個(gè)《3D游戲編程大師技巧》中,都詳細(xì)的介紹,而模板對(duì)初學(xué)者可能很晦澀,大家先弄明白模板的機(jī)制,然后多看些例子,我想你會(huì)深刻理解它的含義的。D3D的學(xué)習(xí),可以看D3DSDK的例子,也可以找一些書(shū)籍,很多的。基本上我總結(jié)下,你要知道的是:D3D提供基本常用底層接口,那些是是D3D為了編程必須提供的,那些是不用提供的,比如數(shù)學(xué)庫(kù)我們完全可以自己寫(xiě)。D3D頂點(diǎn)索引BUFFER顏色緩沖,模版緩沖,深度緩沖以及對(duì)這些緩沖的操作目標(biāo)渲染對(duì)象、D3D中的3D流水線單通道渲染,多通道渲染。熟練操作上面的所有,這些都足夠了,其他的都是D3D中多余的,如果你要自己做引擎,很多都要自己實(shí)現(xiàn),當(dāng)然初學(xué)者可以就用它擴(kuò)展的函數(shù)庫(kù),也很方便的。4其他要知道的游戲知識(shí)下面知識(shí)都屬于很強(qiáng)的游戲技術(shù)范疇,他們只屬于單單游戲中技術(shù)支持,引擎就是用合理的方式,把所有3D相關(guān)包括流水線和下面這些都整和到一起,但這種整和是有效的管理。場(chǎng)景管理算法:BSPOCTREEQUADTREEPORTALPVS動(dòng)畫(huà)系統(tǒng):骨骼動(dòng)畫(huà),蒙皮骨骼動(dòng)畫(huà),漸變動(dòng)畫(huà),和這些動(dòng)畫(huà)的混合陰影:陰影體投影陰影陰影影射剔除算法:包圍球OBBAABBBHV算法LOD系統(tǒng):視點(diǎn)無(wú)關(guān)LOD視點(diǎn)相關(guān)LOD廣告牌:跟蹤相機(jī)方向和只圍繞y軸旋轉(zhuǎn)粒子系統(tǒng)這些是比較常用的,常常碰到的,根據(jù)基本的顏色運(yùn)算,空間運(yùn)算還能衍生出很多游戲特效,等待你自己去看書(shū),去解決。七。3D引擎編程,令你的挑戰(zhàn)達(dá)到了極限就象我前面說(shuō)的,引擎沒(méi)有嚴(yán)格定義劃分,但對(duì)于當(dāng)代的引擎,似乎大家都趨向于越好的東西,越健壯的支持,才稱(chēng)上引擎。現(xiàn)在游戲玩家對(duì)畫(huà)面擬真程度要求很高,這就要求引擎能更好的處理3D世界中大量數(shù)據(jù),一個(gè)好的引擎,起碼要做到以下幾點(diǎn)(引用《3D.Game.Engine.Architecture.Engineering.RealTime.Applications.with.Wild.Magic》里面的話)1。如何把3D世界中大量數(shù)據(jù),讓它實(shí)時(shí)快速處理。2。引擎中的渲染器(用來(lái)管理數(shù)據(jù),進(jìn)行渲染處理的)接口應(yīng)該怎么定義。3。如何讓使用引擎的人,能很容易的使用引擎。4。當(dāng)引擎中添加新特性時(shí),如果讓引擎改動(dòng)最小。我感覺(jué)這4句話,概括的很精辟,如果讓我來(lái)概括,好象我現(xiàn)在還沒(méi)這個(gè)能力。這是一個(gè)當(dāng)代引擎的新的定義,雖然不是全面,但它一語(yǔ)道破天機(jī),如果你的引擎能達(dá)到上面4點(diǎn),我想它已經(jīng)足夠的優(yōu)秀,同時(shí)說(shuō)明你也很優(yōu)秀了。下面我就分別解刨這4句話,讓大家對(duì)引擎有一個(gè)深刻的了解。我只是分析,這4句話要求高手才可以完全去達(dá)到,我現(xiàn)在還不具備這個(gè)能力,所以只能幫大家分析。1。如何把3D世界中大量數(shù)據(jù),讓它實(shí)時(shí)快速處理

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論