• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      Windows平臺(tái)下圖形渲染引擎的實(shí)現(xiàn)

      2018-04-24 07:58:58王建華
      現(xiàn)代計(jì)算機(jī) 2018年8期
      關(guān)鍵詞:剪裁立方體引擎

      王建華

      (四川大學(xué)計(jì)算機(jī)學(xué)院,成都 610065)

      1 需求分析

      游戲引擎[1],是經(jīng)過(guò)精心設(shè)計(jì),可以對(duì)游戲進(jìn)行基礎(chǔ)支持的一系列實(shí)時(shí)處理模塊的有機(jī)結(jié)合,是游戲的核心程序。在游戲中,玩家所體驗(yàn)到的場(chǎng)景的運(yùn)行速度、絢麗的特效,真實(shí)的渲染效果等各方面都是由游戲引擎決定的。3D游戲引擎是游戲引擎中的一個(gè)難點(diǎn),是為3D游戲量身定做的一系列工具的總和,要比2D環(huán)境下的引擎的設(shè)計(jì)復(fù)雜得多。

      3D游戲引擎是很復(fù)雜的,實(shí)現(xiàn)一個(gè)完整的3D游戲引擎不是一件易事,為了簡(jiǎn)化項(xiàng)目復(fù)雜度并且保證引擎能進(jìn)行正常的工作,只實(shí)現(xiàn)3D游戲引擎的基礎(chǔ)圖形部分。因?yàn)檫@個(gè)部分可以將游戲的輸入數(shù)據(jù)轉(zhuǎn)化為輸出圖形,并在屏幕上進(jìn)行顯示,人們所能接收的經(jīng)過(guò)處理的信息就是顯示在屏幕上的圖形,這個(gè)部分的好壞直接影響到了使用該3D圖形渲染引擎開(kāi)發(fā)的游戲的體驗(yàn)。

      2 管線設(shè)計(jì)

      由于包含著色器的3D渲染引擎的實(shí)現(xiàn)比較復(fù)雜,不便于初學(xué)者理解,本文采用比較容易實(shí)現(xiàn)的固定管線,雖然固定管線的渲染效果比著色器的渲染效果差,但是其工作流程十分清晰,原理也比較容易理解,便于初學(xué)者掌握,并激發(fā)其在這個(gè)方向上繼續(xù)研究下去的動(dòng)力。管線最終的流程如圖1所示。

      圖1

      3 模塊功能設(shè)計(jì)

      (1)頂點(diǎn)緩沖區(qū)

      用于存儲(chǔ)用戶輸入頂點(diǎn)的位置數(shù)據(jù),顏色數(shù)據(jù),法線數(shù)據(jù),并存儲(chǔ)各頂點(diǎn)在攝相機(jī)坐標(biāo)系下的深度值,為三角形繪制時(shí)的插值計(jì)算提供必須的深度值。頂點(diǎn)緩沖區(qū)還應(yīng)提供復(fù)制的功能,以及能對(duì)頂點(diǎn)進(jìn)行變換的接口。

      (2)索引緩沖區(qū)

      用于存儲(chǔ)由頂點(diǎn)所構(gòu)成的平面的面數(shù)據(jù)(為了便于計(jì)算,統(tǒng)一采用三角形平面)這些數(shù)據(jù)有:構(gòu)成三角形的三個(gè)頂點(diǎn)的序號(hào),三角形的頂點(diǎn)的卷繞方式,三角形平面的面顏色,三角形平面的紋理以及其各頂點(diǎn)的紋理坐標(biāo)。索引緩沖區(qū)還應(yīng)提供平面的背面剪裁功能,及時(shí)剔除不需要進(jìn)行繪制的平面,減少不必要的計(jì)算開(kāi)銷(xiāo),提升引擎的渲染效率。

      (3)屏幕緩沖區(qū)

      用于存儲(chǔ)屏幕某點(diǎn)最終應(yīng)該顯示的顏色,對(duì)于有多個(gè)3D空間中的點(diǎn)都會(huì)變換到同一屏幕上的點(diǎn)的情況,為了簡(jiǎn)化問(wèn)題,認(rèn)為所有的平面都是不透明的,不進(jìn)行顏色遮罩處理,而是簡(jiǎn)單地選取距離攝相機(jī)最近的點(diǎn)的顏色作為此點(diǎn)的最終色,在一次繪制完成后,清空屏幕緩沖區(qū),然后進(jìn)行下一次繪制。

      (4)幾何變換中的基本工具

      為固定管線提供基本的功能支持,這些工具包括,三維向量,四維向量,三階矩陣,四階矩陣,攝相機(jī),管線中經(jīng)常要使用這些工具,例如,可用其進(jìn)行所需的各種變換,將3D空間中的點(diǎn)映射到屏幕空間上。

      (5)圖片采樣器

      用于讀取資源圖片,并生成MipMap所需的減采樣后的紋理,并負(fù)責(zé)對(duì)圖片的存儲(chǔ)結(jié)構(gòu)進(jìn)行分析,得到所需要的像素的顏色,在圖片使用完后,負(fù)責(zé)資源的釋放工作,防止內(nèi)存資源過(guò)于緊張。

      (6)場(chǎng)景圖

      用于處理多對(duì)象之間有層次關(guān)系的情境,只需對(duì)頂層實(shí)體進(jìn)行變換,即可實(shí)現(xiàn)對(duì)其子實(shí)體的級(jí)連變換,很大程度上簡(jiǎn)化了使用此3D圖形渲染引擎的游戲開(kāi)發(fā)者的工作,使其將更多的精力投入到游戲其他方面的設(shè)計(jì)與制作中,提升開(kāi)發(fā)游戲的效率,縮短游戲的開(kāi)發(fā)周期。

      4 變換設(shè)計(jì)[2]

      (1)世界空間變換

      在3D圖形程序中,有些物體的位置在整個(gè)程序運(yùn)行期間都不會(huì)變化(相對(duì)于游戲世界),我們稱其為靜態(tài)對(duì)象;而有些物體不是靜止不動(dòng)的,而是需要根據(jù)輸入的參數(shù)或根據(jù)自身的運(yùn)行狀態(tài)進(jìn)行動(dòng)態(tài)調(diào)整的,我們稱其為動(dòng)態(tài)對(duì)象。對(duì)于后者,我們應(yīng)提供一些必要的動(dòng)態(tài)變換功能,例如對(duì)象的平移和旋轉(zhuǎn),有了這個(gè)功能以后,用戶就可以很方便地對(duì)動(dòng)態(tài)對(duì)象進(jìn)行控制,使對(duì)象能按設(shè)定的模式進(jìn)行工作,而不用在每幀更新時(shí)輸入對(duì)象在新位置的數(shù)據(jù),因?yàn)槠湓谛挛恢玫臄?shù)據(jù)會(huì)自動(dòng)計(jì)算,在很在程度上減少了用戶的工作量。

      (2)視點(diǎn)空間變換

      我們需要通過(guò)模擬人眼觀察物體的過(guò)程或模擬照相機(jī)攝像的過(guò)程來(lái)實(shí)現(xiàn)較為真實(shí)的渲染,因此需要將全部對(duì)象轉(zhuǎn)換到視點(diǎn)坐標(biāo)系下,在這個(gè)坐標(biāo)系下,攝相機(jī)處在原點(diǎn)位置,攝相機(jī)的朝向向量,攝相機(jī)的俯仰程度向量,以及一個(gè)側(cè)向向量構(gòu)成了此坐標(biāo)系的三個(gè)基向量,這樣做符合人們的日常生活經(jīng)驗(yàn),便于人們理解和接受。在攝相機(jī)空間中,我們需要進(jìn)行平面的背面剪裁,及時(shí)剔除無(wú)需考慮的內(nèi)容,提升系統(tǒng)的效率。

      (3)剪裁空間變換

      對(duì)視角空間進(jìn)行進(jìn)一步的變換,將由近平面,遠(yuǎn)平面,左平面,右平面,上平面和下平面組成的一個(gè)平頭視錐體轉(zhuǎn)化為一個(gè)立方體,由于對(duì)立方體的剪裁效率要遠(yuǎn)遠(yuǎn)大于不規(guī)則形體的剪裁效率[4],所以通過(guò)這個(gè)變換,降低了后續(xù)的視椎體剪裁操作的計(jì)算量,減少了資源的消耗。

      (4)標(biāo)準(zhǔn)空間變換

      將剪裁空間的非標(biāo)準(zhǔn)立方體轉(zhuǎn)化為一個(gè)標(biāo)準(zhǔn)立方體,標(biāo)準(zhǔn)化的好處是可以更好地表現(xiàn)出各點(diǎn)的位置關(guān)系,并且為后續(xù)工作的進(jìn)行奠定了基礎(chǔ)。

      (5)屏幕空間變換

      將標(biāo)準(zhǔn)空間中的點(diǎn)變換到屏幕空間中用以顯示,這個(gè)過(guò)程的一個(gè)非常重要的任務(wù)是進(jìn)行相應(yīng)的左右手系的變換以便正確顯示計(jì)算結(jié)果。

      5 繪制示例

      在此示例中,存在一個(gè)天空盒,天空盒[5]實(shí)際上是在立方體的內(nèi)部觀察立方體,并且將圖片貼在立方體內(nèi)側(cè)而形成的。在立方體的中心放置了一個(gè)攝相機(jī)用于觀察,攝相機(jī)會(huì)不停地進(jìn)行水平旋轉(zhuǎn),因此可見(jiàn)內(nèi)容會(huì)隨著時(shí)間而出現(xiàn)周期性變化,實(shí)驗(yàn)總共使用了3張圖片用來(lái)進(jìn)行貼圖操作,其中,一張用于地面貼圖,一張用于天空貼圖,還有一張用于四周景色的貼圖。在此示例中采用透視投影,因此會(huì)出現(xiàn)近大遠(yuǎn)小的感覺(jué),距離攝相機(jī)近的貼圖會(huì)有明顯的拉伸感,見(jiàn)圖2:從中可以看出,總體渲染效果能滿足一般的3D圖形程序的要求,但是由于浮點(diǎn)數(shù)的誤差,在兩個(gè)平面的交接處,有可能會(huì)出現(xiàn)一點(diǎn)黑色的縫隙。

      圖2

      6 結(jié)語(yǔ)

      本文利用C++語(yǔ)言[3]和Visual Studio 2015開(kāi)發(fā)工具,實(shí)現(xiàn)了3D游戲引擎中的渲染部分,并通過(guò)對(duì)圖形渲染部分的詳細(xì)說(shuō)明,使讀者對(duì)3D游戲引擎中的渲染部分有了更深入的了解。

      當(dāng)前完成的3D渲染引擎實(shí)現(xiàn)了進(jìn)行3D渲染時(shí)所用的基本功能,還可以完成一些較為高級(jí)的功能,但是這僅僅是一個(gè)示例性質(zhì)的引擎,并沒(méi)有諸如資源管理、配套的開(kāi)發(fā)工具和與硬件良好結(jié)合等在商業(yè)用的高端引擎中存在的一些特性,因此這個(gè)引擎是不完善的,有著很大的改進(jìn)空間,但是此示范性引擎的優(yōu)點(diǎn)在于以通俗易懂的方式向讀者闡明了3D渲染引擎的一種實(shí)現(xiàn)方式,達(dá)到了便于理解和掌握這一目的。

      參考文獻(xiàn):

      [1]David.H.Eberly.3D游戲引擎設(shè)計(jì),實(shí)時(shí)計(jì)算機(jī)圖形學(xué)的應(yīng)用方法[M].北京:清華大學(xué)出版社,2013.

      [2]王長(zhǎng)波,高巖.3D計(jì)算機(jī)圖形學(xué)[M].北京:機(jī)械工業(yè)出版社,2010:10-90.

      [3]Charles.Petzold著.Windows程序設(shè)計(jì).方敏,張勝等譯.北京:清華大學(xué)出版社,2010:506-642.

      [4]David.F.Rogers著.計(jì)算機(jī)圖形算法基礎(chǔ)[M].石教英,彭群生等譯.北京:機(jī)械工業(yè)出版社,2005.

      [5]石教英.虛擬現(xiàn)實(shí)基礎(chǔ)及使用算法[M].北京:科學(xué)出版社,2002.

      猜你喜歡
      剪裁立方體引擎
      疊出一個(gè)立方體
      心靈手巧的“剪裁師”——卷葉象甲
      渾然一體有玄奧——寫(xiě)人作文之人事“剪裁”與“拼接”
      論報(bào)紙圖片編輯如何巧“剪裁”
      新聞傳播(2018年10期)2018-08-16 02:10:08
      藍(lán)谷: “涉藍(lán)”新引擎
      商周刊(2017年22期)2017-11-09 05:08:31
      圖形前線
      立方體星交會(huì)對(duì)接和空間飛行演示
      太空探索(2016年9期)2016-07-12 09:59:53
      折紙
      無(wú)形的引擎
      河南電力(2015年5期)2015-06-08 06:01:46
      基于Cocos2d引擎的PuzzleGame開(kāi)發(fā)
      琼结县| 四子王旗| 武城县| 乌兰浩特市| 库尔勒市| 海原县| 麻栗坡县| 山阴县| 肇东市| 于田县| 张北县| 盐城市| 武宣县| 个旧市| 顺义区| 彝良县| 新绛县| 工布江达县| 望江县| 嵊泗县| 即墨市| 资兴市| 东莞市| 永吉县| 正镶白旗| 滕州市| 吉木乃县| 白沙| 中宁县| 泰宁县| 临猗县| 湘乡市| 兴隆县| 霍邱县| 桐庐县| 金华市| 满城县| 云林县| 青田县| 行唐县| 贺州市|