• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            云海航行Q+偉的幻想鄉(xiāng)

            熱愛(ài)探索未知事物的coder 、 writer 、watcher and thinker
            posts - 16, comments - 6, trackbacks - 0, articles - 0

            視頻游戲(VideoGame),是絕對(duì)離不開(kāi)圖形的。計(jì)算機(jī)圖形學(xué)(Computer Graphic Science),涉及圖形硬件(GPU)、圖像標(biāo)準(zhǔn)(bmp,png,jpeg..)、渲染算法(render method)、動(dòng)畫(huà)(Animation)、虛擬現(xiàn)實(shí)(VR)等。而跟游戲相關(guān)的主要是圖像和圖形(Kinect類(lèi)的游戲涉及計(jì)算機(jī)視覺(jué),也就是圖像分析、模式匹配)。注意,圖像跟圖形要區(qū)分開(kāi),不嚴(yán)格地說(shuō),圖像是標(biāo)量,指通過(guò)拍照、掃描等方式得到的位圖(Bitmap);圖形是矢量,指根據(jù)數(shù)據(jù)、公式、算法用計(jì)算機(jī)生成的圖形。而3D模型基本就是圖形和圖像在三維空間上的組合,內(nèi)部是一系列的頂點(diǎn)坐標(biāo)和貼圖坐標(biāo)的組合及貼圖文件等。

                    

            大二我在做一個(gè)2D游戲《東方千⑨譚》的時(shí)候,一開(kāi)始繪圖使用的是QT的圖形庫(kù),讀取圖片、顯示圖片都可以用這個(gè)庫(kù)做到。后來(lái)做Demo,測(cè)試同時(shí)繪制300個(gè)人物(64x64的貼圖)的時(shí)候,幀率已經(jīng)無(wú)限低了。后來(lái)知道了是因?yàn)檫@個(gè)庫(kù)的繪圖API內(nèi)部是軟件渲染的。軟件渲染,顧名思義,即是用CPU來(lái)處理圖像顯示的工作,換言之就是自不量力地?fù)屃?/span>GPU的活來(lái)干。最后我明白了,拿QT來(lái)做游戲是個(gè)很蠢的行為。而要加快渲染的速度,就需要使用硬件渲染的方法。也就是使用3D圖形APIOpenGL / Direct3D

             

            我是在大一的暑假開(kāi)始接觸3D圖形學(xué),至今算是學(xué)了一年有余。我個(gè)人認(rèn)為,對(duì)于3D和圖形學(xué),必須搞清楚兩者之間的關(guān)系。計(jì)算機(jī)世界里的3D其實(shí)就是數(shù)學(xué),舉例來(lái)說(shuō)就是,線性代數(shù)中平移、旋轉(zhuǎn)、縮放的應(yīng)用,曲線曲面技術(shù)中的Bezier、和NURBS,還有計(jì)算機(jī)動(dòng)畫(huà)的插值算法(樣條插值、平滑插值、線性插值)等。而3D圖形學(xué)要做的就是,怎樣根據(jù)物體的三維數(shù)據(jù)來(lái)模擬顯示物體,即如何渲染到二維平面,再輸出到顯示器。

            這個(gè)工作是有多個(gè)步驟的,稱(chēng)作圖形處理流水線,或者渲染管道。這條流水線大部分工作都是GPU來(lái)執(zhí)行,而實(shí)際上3D數(shù)學(xué)部分(矩陣變換或四元數(shù)計(jì)算)也是GPU的工作,目前通過(guò)CudaOpenCL還可以利用GPU做圖形學(xué)以外的事,這一個(gè)領(lǐng)域叫做通用并行計(jì)算技術(shù)。

            關(guān)于渲染管道(pipeline),OpenGLDirectX的教程肯定都會(huì)說(shuō)到。要搞懂什么是管線,估計(jì)剛學(xué)圖形學(xué)的人都需要一定時(shí)間。學(xué)一套3D API 不是什么難事,有一本好的入門(mén)圖書(shū)和一份API查詢手冊(cè)就夠了。學(xué)習(xí)3D圖形學(xué)重要的是理解它的工作原理。如矩陣變換的旋轉(zhuǎn)矩陣,就是比較復(fù)雜的一個(gè)core矩陣,要搞懂它就要去看一遍這個(gè)矩陣的推導(dǎo),再看下旋轉(zhuǎn)矩陣是如何應(yīng)用到實(shí)際中去的。

             

            關(guān)于OpenGLDirect3D的抉擇問(wèn)題,初學(xué)3D圖形學(xué)肯定會(huì)有,我個(gè)人覺(jué)得OpenGL是初學(xué)者必學(xué)的,不僅跨平臺(tái)性強(qiáng)(D3D只能用在WindowsWP7Xbox,而OGL幾乎所有平臺(tái)都支持,另外,假如WebGL,勢(shì)必會(huì)帶來(lái)一場(chǎng)網(wǎng)站開(kāi)發(fā)的革命),而且接口設(shè)計(jì)得簡(jiǎn)單易懂。D3D應(yīng)該是在實(shí)際項(xiàng)目開(kāi)發(fā)的時(shí)候,再根據(jù)環(huán)境條件等來(lái)考慮是否使用。如果OpenGL學(xué)得差不多了,學(xué)D3D不過(guò)就是學(xué)習(xí)另一套API的事。下面是OpenGL Vs Direct3D的一篇文章,值得一看:

            OpenGL 3 & DirectX 11: The War Is Over》:繪圖 API 終戰(zhàn)之日?

            http://blog.monkeypotion.net/reading/gameprogreading/opengl-versus-directx-the-war-is-over

            OpenGL的教程,個(gè)人推薦《OpenGL的超級(jí)寶典4th(Super Bible),這里就不做介紹了。

             

            3D圖形學(xué)的高速發(fā)展是從3D游戲之父卡馬克開(kāi)發(fā)的《DOOM》出現(xiàn)在人們面前算起的。(推薦一本書(shū)《DOOM啟示錄》,講述了卡馬克和羅梅洛兩位游戲界傳奇人物的傳奇故事,絕對(duì)霸氣,震撼人心)至今3D圖形學(xué)發(fā)展十幾二十年,固定渲染管道也是很多年的產(chǎn)物了。現(xiàn)在這個(gè)管道不再是完全讓計(jì)算機(jī)管理,而是其中的幾個(gè)環(huán)節(jié)可以由程序員來(lái)控制。這個(gè)技術(shù)就叫shader,著色器(頂點(diǎn)著色器、片段著色器、 幾何著色器)。

            Shader編程是完全不同于其他語(yǔ)言的,因?yàn)樗紤]的是并行的問(wèn)題,并不是線性的問(wèn)題。Shader語(yǔ)言有三種,OpenGLGLSL, D3DHLSL,還有NvidiaCg(此Cg不是通常意義的CG,而是C for graphic,即用于圖像的類(lèi)C語(yǔ)言)。Cg是由Nvidia提出的,目的是為了調(diào)和OpenGLDirectX的矛盾。Cg的優(yōu)點(diǎn)在于,它是處在GLSLHLSL兩者之上的,用Cg寫(xiě)的著色器代碼編譯后就變成GLSL或者HLSL的代碼,shader程序員只需寫(xiě)一份Cg語(yǔ)言的代碼就可以了(Cg語(yǔ)言的語(yǔ)法幾乎和HLSL一樣)。

            另外可以看一下這篇文章:《著色語(yǔ)言(Shader Language),以及HLSL VS GLSL VS CG

            鏈接:http://bbs.gameres.com/showthread.asp?threadid=138918&page=1

            Cg的各種信息和SDKSample下載可以到英偉達(dá)官網(wǎng)查找:

            http://developer.nvidia.com/cg-toolkit-archive

             

            學(xué)習(xí)Shader編程,有很多不錯(cuò)的書(shū),雖然我都沒(méi)看過(guò),比如Nvidia的《GPU gem123,這3本有中文版。另外《Shader X1-7,看介紹也是很不錯(cuò)的,不過(guò)基本沒(méi)中文版。

            Shader 可以實(shí)現(xiàn)目前大部分的實(shí)時(shí)、非實(shí)時(shí)渲染算法(陰影、光照等)。注意,Shader著色器語(yǔ)言是用來(lái)實(shí)現(xiàn)渲染算法的,當(dāng)然存在有人利用shader語(yǔ)言來(lái)做AI等事情(這些以后估計(jì)都會(huì)是cudaOpenCL的工作)。

             

            說(shuō)回游戲。游戲?qū)嶋H上并不會(huì)用到太多最新最前沿的技術(shù),因?yàn)橐紤]到老百姓的PC配置都是參差不齊的。頂點(diǎn)著色器和片段著色器,現(xiàn)在大部分的顯卡都至少支持最基本的功能,而Geometry shader,就仍未普及,即只有近幾年內(nèi)的顯卡才有這個(gè)能力。

             

            對(duì)于二維平面游戲,圖形圖像技術(shù)通常是用來(lái)做特效,完全用貼圖的游戲已經(jīng)過(guò)時(shí)了。例如可以用shader做模糊(Blur)、扭曲、灰度圖化、強(qiáng)光等等PS中的濾鏡效果,還有利用3D API來(lái)增強(qiáng)畫(huà)面效果,如3D旋轉(zhuǎn)菜單、游戲場(chǎng)景三維化(實(shí)際上只是起美化的作用,如東方Project的一系列彈幕作)。并且存在有二維游戲中的貼圖是通過(guò)把由三維模型壓到二維平面而得到的。

             

            三維游戲,就復(fù)雜太多了,甚至比做計(jì)算機(jī)動(dòng)畫(huà)還復(fù)雜,因?yàn)椴粌H要考慮效果、還要考慮效率(達(dá)到60/秒左右的圖像輸出能力就是實(shí)時(shí)渲染)。在效果上有非真實(shí)渲染和真實(shí)性渲染。真實(shí)性渲染就是盡可能地仿真,如如何實(shí)現(xiàn)現(xiàn)實(shí)中的鏡面反射、次表面散射、霧、鏡頭光暈、陰影等。非真實(shí)渲染就是將人物、場(chǎng)景渲染成卡通效果。利用shader就可以實(shí)現(xiàn)這些效果。

             

                     如果是小團(tuán)隊(duì)開(kāi)發(fā)游戲,而且打算自己做一個(gè)商業(yè)級(jí)的3D游戲引擎,那這個(gè)小團(tuán)隊(duì)處境堪憂。首先技術(shù)硬實(shí)力要過(guò)關(guān),這不是一件個(gè)人英雄可以辦到的事(3D算法、渲染算法,沒(méi)有潛心學(xué)習(xí)個(gè)幾年,做出來(lái)的引擎不會(huì)強(qiáng)到哪里去)。全3D游戲涉及的技術(shù)太多,與其冒風(fēng)險(xiǎn)自己開(kāi)發(fā)一個(gè)引擎,不如花錢(qián)買(mǎi)一個(gè)商業(yè)級(jí)的或者使用開(kāi)源引擎(LGPL license的應(yīng)該有)。而如果是做2D游戲,應(yīng)用一些shader特效來(lái)強(qiáng)化視覺(jué)沖擊力倒是可以。

             

            圖形只是游戲的一個(gè)方面,還有很多方面需要重視,像游戲引擎架構(gòu)(可擴(kuò)展性)、

            腳本引擎、聲音引擎、GUI系統(tǒng)、游戲編輯器、資源管理、版本更新方法等,網(wǎng)游的話就是另一個(gè)話題了。本人對(duì)網(wǎng)游暫無(wú)研究,最難的部分可能是網(wǎng)絡(luò)安全和數(shù)據(jù)傳輸,同步等。

             

            ————————————————————————-

            一不小心扯了2000+字了,也不知我的這篇經(jīng)驗(yàn)總結(jié)對(duì)讀者有沒(méi)有啟發(fā)作用。現(xiàn)在說(shuō)說(shuō)我自己。我是在大學(xué)時(shí)開(kāi)始接觸編程,興趣不算太濃,只是因?yàn)槲易约合矚g玩游戲,所以才報(bào)了軟件工程專(zhuān)業(yè)..一開(kāi)始總是在想學(xué)編程是否有前途,是不是真的很難學(xué)。而其實(shí)現(xiàn)在還是在想。畢竟誰(shuí)也不想隨隨便便就過(guò)了一生。對(duì)于游戲開(kāi)發(fā),我也僅僅是個(gè)初學(xué)者,我不奢望能掌握游戲開(kāi)發(fā)的全部知識(shí),只是夢(mèng)想著有一天,能拿著自己的游戲,在某個(gè)游戲展上介紹自己的游戲~

            工科專(zhuān)業(yè),任何一個(gè)學(xué)起來(lái)都不會(huì)輕松,如果是要成為領(lǐng)域高手。大學(xué)本科,確實(shí)是打基礎(chǔ)(不只是專(zhuān)業(yè)課程學(xué)習(xí))的時(shí)期,而也是尋找人生方向的時(shí)期。這個(gè)時(shí)候很容易浮躁,可能因?yàn)椴幌矚g自己的專(zhuān)業(yè)還是沒(méi)有信心。個(gè)人認(rèn)為,無(wú)論你的打算是怎樣,只要生活態(tài)度是好的,學(xué)習(xí)態(tài)度是向上的,對(duì)自己所作的每一個(gè)決定都負(fù)責(zé),每一天都過(guò)得充實(shí)、健康,那就夠了。不要為明天憂慮。

            Feedback

            # re: [游戲開(kāi)發(fā)經(jīng)驗(yàn)分享]關(guān)于游戲中的圖形學(xué)   回復(fù)  更多評(píng)論   

            2011-09-20 02:29 by K.V
            看你挺清醒的,生活應(yīng)該也是充實(shí)快樂(lè)的吧。珍惜大學(xué)的時(shí)光。加油。

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            男女久久久国产一区二区三区| 91精品国产乱码久久久久久| 久久久精品久久久久影院| 国产精品一区二区久久| 日韩精品久久久肉伦网站 | 久久精品无码专区免费| 久久99精品国产99久久6男男| 久久se精品一区二区影院 | 99久久国产亚洲高清观看2024| 日韩精品久久久久久免费| 久久免费视频网站| 亚洲一区中文字幕久久| 久久精品国产久精国产果冻传媒| A级毛片无码久久精品免费| 国内精品人妻无码久久久影院导航| 久久线看观看精品香蕉国产| 2021最新久久久视精品爱| 久久精品国产网红主播| 成人免费网站久久久| 麻豆一区二区99久久久久| 久久国产欧美日韩精品免费| 久久精品国产亚洲综合色| 久久精品蜜芽亚洲国产AV| 欧美精品九九99久久在观看| 久久久精品视频免费观看| 国产AⅤ精品一区二区三区久久 | 久久精品国产亚洲AV影院| 人妻丰满?V无码久久不卡| 免费精品久久天干天干| 欧美日韩精品久久久免费观看| 色成年激情久久综合| 色综合久久天天综合| 久久综合久久久| 大香网伊人久久综合网2020| 亚洲国产精品久久久久网站| 大伊人青草狠狠久久| 久久91精品久久91综合| 99久久精品免费看国产免费| 久久精品视频网| 国产女人aaa级久久久级| 久久精品国产亚洲av瑜伽|