青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴(yán)以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

3D Engine 的設(shè)計(jì)架構(gòu)

Introduction (簡(jiǎn)介)

讓咱們談?wù)勀闳绾巫珜懸环萏峁﹥?yōu)雅性能的3D引擎。你的引擎需要提供的包括:曲面(curved surfaces)、動(dòng)態(tài)光線(dynamic lighting)、體霧(volumetric fog)、鏡面(mirrors)、入口(portals)、天空體(skyboxes)、節(jié)點(diǎn)陰影(vertex shaders)、粒子系統(tǒng)(particle systems)、靜態(tài)網(wǎng)格模型(static mesh models)、網(wǎng)格模型動(dòng)畫(animated mesh models)。假如你已經(jīng)知道如何以上所述的所有功能順利工作,你也許便能將那些東東一起置入到一個(gè)引擎當(dāng)中。

等等!在你開始撰寫代碼前你必須先構(gòu)思一下如何去架構(gòu)你的引擎。多數(shù)來講,你一定是迫切地渴望去制作一個(gè)游戲,但如果你立即投入便開始為你的引擎撰寫代碼后,你一定會(huì)覺得非常難受,開發(fā)后期你可能會(huì)為置入新的特效與控制而不得不多次重寫大量的局部代碼,甚至以失敗而放棄告終?;ㄒ稽c(diǎn)時(shí)間好好地為你引擎深謀遠(yuǎn)慮一番,這將會(huì)為你節(jié)省大量時(shí)間,也少一點(diǎn)頭痛。你一定不會(huì)急切地去架構(gòu)一個(gè)巨型的工程;或許你也會(huì)在引擎未完成時(shí)而干脆放棄它,然后去干的別的什么事兒。好了,當(dāng)你掌握學(xué)習(xí)你所需知識(shí)的方式之前,也許你還不能完成那些事兒。將設(shè)計(jì)真正地完成確實(shí)是件美事,為之你會(huì)感覺更好,你將為之而耀眼!

讓我們分析一下具備完整功能的3D游戲引擎的需要哪些基本部件。首先,這為具有相應(yīng)3D經(jīng)驗(yàn)但且還需一些指引的開發(fā)者提供了一些信息。這是一些并不難且能快速掌握但是你必須應(yīng)用的內(nèi)容條目。為將你的工作更好地進(jìn)行下去,這里將對(duì)關(guān)于“把多大的工作量”與“多少部分”置入一個(gè)游戲引擎給出一個(gè)總概。我把這些成分稱為 系統(tǒng)(System)、控制臺(tái)(Console)、支持(Support),渲染/引擎 內(nèi)核(Renderer/Engine Core)、游戲介質(zhì)層(Game Interface)、以及工具/數(shù)據(jù)(Tools/Data)。



Tools/Data (工具/數(shù)據(jù))

在開發(fā)過程中,你總是需要一些數(shù)據(jù),但不幸的是這并不象寫文本文件或是定義一個(gè)立方體那么簡(jiǎn)單。至少,你得需要3d模型編輯器,關(guān)卡編輯器,以及圖形程序。你可以通過購(gòu)買,也可以在網(wǎng)上找一些免費(fèi)的程序滿足你的開發(fā)要求。不幸的是你可能還需要一些更多的工具可你卻根本無法獲得(還不存在呢),這時(shí)你只得自己動(dòng)手去寫。最終你很可能要自行設(shè)計(jì)編寫一個(gè)關(guān)卡編輯器,因?yàn)槟愀静豢赡塬@得你所需。你可能也會(huì)編寫一些代碼來為大量的文件打個(gè)包,整天面對(duì)應(yīng)付成百上千個(gè)文件倒是非常痛苦的。你還必須寫一些轉(zhuǎn)換器或是插件將3d模型編輯器的模型格式轉(zhuǎn)換成你自己的格式。你也需要一些加工游戲數(shù)據(jù)的工具,譬如可見度估算或是光線貼圖。

一個(gè)基本的準(zhǔn)則是,你可能要為設(shè)計(jì)工具而置入比游戲本身等量甚至更多的代碼。開始你總能找到現(xiàn)成的格式和工具,但是經(jīng)過一段時(shí)間以后你就能認(rèn)識(shí)到你需要你的引擎有很大的特性,然后你就會(huì)放棄以前的撰寫方式。

也許目前非常流行利用的第3方工具輔助開發(fā),所以你必須時(shí)刻注意你的設(shè)計(jì)。因?yàn)橐坏┊?dāng)你將你的引擎發(fā)布為opensouce或是允許修改,那也許在某天中會(huì)有某些人來應(yīng)用你的開發(fā)成果,他們將其擴(kuò)展或者做某些修改。

或許你也應(yīng)該花大量時(shí)間去設(shè)計(jì)美術(shù),關(guān)卡,音效,音樂和實(shí)體模型,這就和你設(shè)計(jì)撰寫游戲,工具以及引擎一樣。



System (系統(tǒng))

系統(tǒng)(system)是引擎與機(jī)器本身做通信交互的部件。一個(gè)優(yōu)秀的引擎在待平臺(tái)移植時(shí),它的系統(tǒng)則是唯一需要做主要更改(擴(kuò)加代碼)的地方。我們把一個(gè)系統(tǒng)分為若干個(gè)子系統(tǒng),其中包括:圖形(Graphics)、輸入(Input)、聲音(Sound)、記時(shí)器(Timer)、配置(Configuration)。主系統(tǒng)負(fù)責(zé)初始化、更新、以及關(guān)閉所有的子系統(tǒng)。

圖形子系統(tǒng)(Graphics Sub-System)在游戲里表現(xiàn)得非常直觀,如果想在屏幕上畫點(diǎn)什么的話,它(圖形子系統(tǒng))便干這事兒。大多數(shù)來講,圖形子系統(tǒng)都是利用OpenGL、Direct3D, Glide或是軟件渲染(software rendering)實(shí)現(xiàn)。如果能更理想一些,你甚至可以把這些API都給支持了,然后抽象出一個(gè)“圖形層”并將它置與實(shí)現(xiàn)API之上,這將給了客戶開發(fā)人員或是玩家更多的選擇,以獲取最好的兼容性、最佳的表現(xiàn)效果。

輸入子系統(tǒng)(Input Sub-System)需要把各種不同輸入裝置(鍵盤、鼠標(biāo)、游戲板[Gamepad],游戲手柄[Joystick])的輸入觸發(fā)做統(tǒng)一的控制接收處理。(透明處理) 比方說,在游戲中,系統(tǒng)要檢測(cè)玩家的位置是否在向前移動(dòng),與其直接地分別檢測(cè)每一種輸入裝置,不如通過向輸入子系統(tǒng)發(fā)送請(qǐng)求以獲取輸入信息,而輸入子系統(tǒng)才在幕后真正地干活(分別檢測(cè)每一種輸入裝置),這一切對(duì)于客戶開發(fā)人員都是透明的。用戶與玩家可以非常自由地切換輸入裝置,通過不同的輸入裝置來獲取統(tǒng)一的行為將變的很容易。

聲音子系統(tǒng)(sound system)負(fù)責(zé)載入、播放聲音。該子系統(tǒng)功能非常簡(jiǎn)潔明了,但當(dāng)前很多游戲都支持3D聲音,實(shí)現(xiàn)起來會(huì)稍許復(fù)雜一些。

3D游戲引擎中很多出色的表現(xiàn)都是基于“時(shí)間系統(tǒng)”(time)的。因此你需要一段時(shí)間來為時(shí)間子系統(tǒng)(Timer sub-system)好好構(gòu)思一番。即使它非常的簡(jiǎn)單,(游戲里)任何東西都是通過時(shí)間觸發(fā)來做移動(dòng)變化,但一份合理的設(shè)計(jì)將會(huì)讓你避免為實(shí)現(xiàn)而一遍又一遍地撰寫大量雷同的控制代碼……

配置系統(tǒng)(Configuration)位于所有子系統(tǒng)的頂端。它負(fù)責(zé)讀取配置記錄文件,命令行參數(shù),或是實(shí)現(xiàn)修改設(shè)置(setup)。在系統(tǒng)初始化以及運(yùn)行期間,所有子系統(tǒng)都將一直與它保持通訊。切換圖象解析度(resolution),色深(color depth),定義按鈕(key bindings),聲音支持選項(xiàng)(sound support options),甚至包括載入游戲,該系統(tǒng)將這些實(shí)現(xiàn)顯得格外的簡(jiǎn)單與方便。把你引擎設(shè)計(jì)得更為可設(shè)置化一些,這將為調(diào)試與測(cè)試帶來更大的方便;玩家與用戶也能很方便地選擇他(她)們喜歡的運(yùn)行方式。



Console (控制臺(tái))

哈!我知道所有人都樂意去更風(fēng)做一個(gè)象Quake那樣的控制臺(tái)(console)系統(tǒng)。但這的確是一個(gè)非常好的想法。通過命令行變量與函數(shù),你就能夠在運(yùn)行時(shí)改變你的游戲或是引擎的設(shè)置,而不需要重啟。開發(fā)期間輸出調(diào)試信息它將顯得非常的有效。很多時(shí)間你都需要測(cè)試一系列變量的值,將這些值輸出到控制臺(tái)上要比運(yùn)行一個(gè)debugger速度顯然要快得多。你的引擎在運(yùn)行期間,一旦發(fā)現(xiàn)了一個(gè)錯(cuò)誤,你不必立即退出程序;通過控制臺(tái),你可以做些非常輕便的控制,并將這個(gè)錯(cuò)誤信息打印出來。假如你不希望你的最終用戶看見或是使用該控制臺(tái),你可以非常方便地將其disable,我想沒人能看得見它。



Support (支持)

支持系統(tǒng)(Support)在你引擎中任何地方都將被使用到。該系統(tǒng)包含了你引擎中所有的數(shù)學(xué)成分(點(diǎn),面,矩陣等),(內(nèi))存儲(chǔ)管理器,文件載入器,數(shù)據(jù)容器(假如你不愿自己寫,也可以使用STL)。該模塊任務(wù)顯得非?;A(chǔ)與底層,或許你會(huì)將它復(fù)用到更多別的相關(guān)項(xiàng)目中去。



Renderer/Engine Core (渲染/引擎 內(nèi)核)

哈~是呀,所有的人都熱愛3D圖象渲染!因?yàn)檫@邊有著非常多的不同種類的3D世界渲染方式,可要為各類擁有不同工作方式的3D圖形管道做出一個(gè)概要描述也是幾乎不可能的。

不管你的渲染器如何工作,最重要的是將你的渲染器組件制作得基化(based)與干凈(clean)。
首先可以確定的是你將擁有不同的模塊來完成不同的任務(wù),我將渲染器拆分為以下幾個(gè)部份:可見裁減(Visibility)、碰撞檢測(cè)與反饋(Collision Detection and Response)、攝像器(Camera)、靜態(tài)幾何體(Static Geometry)、動(dòng)態(tài)幾何體(Dynamic Geometry)、粒子系統(tǒng)(Particle Systems)、布告板(Billboarding)、網(wǎng)格(Meshes)、天空體(Skybox)、光線(Lighting)、霧(Fogging)、節(jié)點(diǎn)陰影(Vertex Shading)和輸出(Output)。

其中每一個(gè)部分都得需要一個(gè)接口來方便地實(shí)現(xiàn)改變?cè)O(shè)置(settings)、位置(position)、方向(orientation)、以及其他可能與系統(tǒng)相關(guān)的屬性配置。

即將顯露出來的一個(gè)主要缺陷便是“特性臃腫”,這將取決于設(shè)計(jì)期間你想實(shí)現(xiàn)什么樣的特性。但如不把新特色置入引擎的話,你就會(huì)發(fā)覺一切都將變的很困難,解決問題的方式也顯得特別遜色。

還有一件有意義的事便是讓所有的三角形[triangles](或是面[faces])最終在渲染管道里經(jīng)過同一點(diǎn)。(并非每次的每個(gè)三角形,這里討論的是三角形列表[triangle lists]、扇形[fans]、帶形[strips]、等) 多花一些工作讓所有物體的格式都能經(jīng)過相同的光線、霧、以及陰影代碼,這樣就能非常便利地僅通過切換材質(zhì)與紋理id就使任何多邊形具有不同的渲染效果。

這不會(huì)傷及到被大量被渲染繪出的點(diǎn),但是一旦你不當(dāng)心,它可能會(huì)導(dǎo)致大量的冗余代碼。

你也許最終便能發(fā)現(xiàn),實(shí)現(xiàn)所有這些你所需的極酷效果可能只占了所有的15%左右的代碼量甚至更少。這是當(dāng)然的,因?yàn)榇蠖鄶?shù)游戲引擎并不只是圖形表現(xiàn)。



Game Interface (游戲介質(zhì))

一個(gè)3D(游戲)引擎很重要的部分便是------它是一個(gè)游戲引擎。但這并不是一個(gè)游戲。一個(gè)真正的游戲所需的一些組件永遠(yuǎn)不要將它包含到游戲引擎里。引擎與游戲制作之間的控制介質(zhì)能使代碼設(shè)計(jì)變得更清晰,應(yīng)用起來也會(huì)更舒服。這雖是一些額外的代碼,但它能使游戲引擎具有非常好重用性,通過設(shè)計(jì)架夠游戲邏輯(game logic)的腳本語言(scripting language)也能使開發(fā)變的更方便,也可以將游戲代碼置入庫(kù)中。如果你想在引擎本身中嵌入你的游戲邏輯系統(tǒng)設(shè)計(jì)的話,大量的問題與大量修改一定會(huì)讓你打消復(fù)用這個(gè)引擎的念頭。

因此,此時(shí)你很可能在思考這個(gè)問題:聯(lián)系引擎與游戲的介質(zhì)層到底提供了什么。答案就是控制(control)。幾乎引擎的每一個(gè)部分都有動(dòng)態(tài)的屬性,而該引擎/游戲介質(zhì)層(engine/game layer)提供了一個(gè)接口去修改這些動(dòng)態(tài)屬性。它們包括了攝像器(camera)、模型屬性(model properties)、光線(lights)、粒子系統(tǒng)物理(particle system physics)、聲效播放(playing sounds)、音樂播放(playing music)、輸入操作(handling input)、切換等級(jí)(changing levels)、碰撞檢測(cè)以及反饋(collision detection and response)、以及2D圖形界面的頂端顯示、標(biāo)題畫面等相關(guān)的東西?;旧蟻碇v如果你想讓你的游戲能優(yōu)雅的實(shí)現(xiàn)這些元素,在引擎中置入這個(gè)介質(zhì)層(interface)是必不可少的。



The Game (游戲)

在這里,我無法告訴你如何去寫你的游戲。這該輪到你發(fā)揮啦。如果你已經(jīng)為你那令人贊異的引擎設(shè)計(jì)出了一套出色的介質(zhì)層的話,我想在設(shè)計(jì)撰寫游戲過程中一定會(huì)輕松許多。

3D游戲引擎設(shè)計(jì)是一項(xiàng)巨大的軟件工程。一個(gè)人獨(dú)立完成設(shè)計(jì)并撰寫也并非不可能,但這不只是熬一兩個(gè)晚上便能搞定的,你很可能會(huì)出寫出幾兆的源代碼量。如果你沒有持久的信念與激情,你很可能無法完成它。

當(dāng)然,別指望你的第一次嘗試就能寫出完整的引擎,挑一個(gè)比較小的項(xiàng)目所需的小規(guī)模引擎去實(shí)現(xiàn)。按你的方式去努力工作,你就能到達(dá)成功。

posted on 2007-01-27 12:01 楊粼波 閱讀(215) 評(píng)論(0)  編輯 收藏 引用


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


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            一区二区激情| 一本色道久久综合亚洲精品按摩 | 欧美成人a∨高清免费观看| 国产日产高清欧美一区二区三区| 午夜在线观看免费一区| 亚洲一区尤物| 国产小视频国产精品| 欧美在线视频a| 久久久久国产成人精品亚洲午夜| 红杏aⅴ成人免费视频| 久热re这里精品视频在线6| 久久久精品性| 亚洲精品午夜精品| 一本色道久久88综合日韩精品| 欧美午夜精品久久久久久久 | 1769国产精品| 91久久精品美女| 欧美成人一区二区三区在线观看 | 久久国产福利| 老司机久久99久久精品播放免费| 亚洲精品一区二区三区蜜桃久| 亚洲精品欧美| 国产一区二区久久| 亚洲国产99| 国产精品一区二区在线观看| 久久一日本道色综合久久| 欧美sm视频| 欧美一区二区三区免费视频| 美女任你摸久久| 午夜精品一区二区三区四区 | 99国产精品国产精品久久| 国产精品天天摸av网| 女主播福利一区| 国产精品成人一区二区三区夜夜夜 | 国产在线拍偷自揄拍精品| 亚洲大胆av| 国产欧美日韩综合一区在线观看| 欧美激情第三页| 国产欧美精品一区| 亚洲精品国产视频| 国外成人网址| 亚洲一区二区三区免费在线观看| 最新中文字幕一区二区三区| 先锋影音国产精品| 在线一区亚洲| 美女在线一区二区| 久久久久国产精品www| 欧美午夜宅男影院在线观看| 欧美高清视频一区| 好吊视频一区二区三区四区| 亚洲一区二区三区三| 亚洲免费观看| 欧美 亚欧 日韩视频在线| 久久免费国产精品| 国产一区二区三区最好精华液| 一区二区日韩免费看| 日韩小视频在线观看专区| 裸体丰满少妇做受久久99精品| 欧美在线日韩| 国产一区二区0| 亚洲欧美日韩区| 亚洲欧美激情在线视频| 欧美视频免费| 日韩一级在线| 亚洲特级毛片| 国产精品激情电影| 亚洲视频日本| 欧美一区二区三区免费观看视频| 欧美调教vk| 亚洲午夜三级在线| 欧美伊人影院| 国产日韩视频| 欧美在线精品免播放器视频| 久久久久久亚洲综合影院红桃| 国产日韩欧美日韩| 欧美在线日韩| 欧美成人免费全部观看天天性色| 黄网站免费久久| 久久青草久久| 亚洲高清av| 亚洲一区二区不卡免费| 国产精品电影网站| 亚洲欧美亚洲| 久久综合中文| 亚洲精品网址在线观看| 欧美私人啪啪vps| 午夜免费日韩视频| 狂野欧美激情性xxxx| 亚洲精品乱码久久久久久黑人 | 亚洲欧美日韩一区二区在线| 久久精品99国产精品酒店日本| 国产综合色精品一区二区三区| 久久久噜噜噜久久狠狠50岁| 亚洲国产影院| 亚洲一二三区视频在线观看| 国产啪精品视频| 久久美女艺术照精彩视频福利播放| 欧美激情视频在线播放| 亚洲桃花岛网站| 激情综合色综合久久综合| 欧美激情一区二区在线| 亚洲天堂av在线免费| 久久精品最新地址| 日韩午夜在线电影| 国产欧美一区二区三区久久 | 午夜精品美女久久久久av福利| 久久综合狠狠综合久久激情| 亚洲精品综合久久中文字幕| 国产精品视频成人| 欧美成人免费小视频| 亚洲一区二区在| 亚洲国产成人av| 久久精品99无色码中文字幕| 日韩视频中午一区| 国内外成人免费视频 | 一区二区三区四区国产精品| 浪潮色综合久久天堂| 亚洲视频专区在线| 亚洲国产精品99久久久久久久久| 国产精品狼人久久影院观看方式| 久久综合色播五月| 亚洲欧美综合另类中字| 亚洲欧洲中文日韩久久av乱码| 久久亚洲高清| 小黄鸭精品aⅴ导航网站入口| 亚洲精选中文字幕| 亚洲电影在线观看| 国产一区二区丝袜高跟鞋图片| 欧美香蕉视频| 欧美欧美全黄| 欧美激情亚洲精品| 麻豆freexxxx性91精品| 久久激情视频免费观看| 亚洲视频一区二区免费在线观看| 亚洲国产精品第一区二区 | 亚洲精品国产日韩| 精品96久久久久久中文字幕无| 国产精品美女久久久免费| 欧美理论电影在线观看| 猛干欧美女孩| 嫩草国产精品入口| 麻豆精品视频在线| 久久婷婷丁香| 久久影视精品| 久久综合色影院| 久热精品在线视频| 麻豆精品精华液| 欧美电影免费观看| 欧美精品久久久久久久免费观看 | 亚洲人成网站777色婷婷| 18成人免费观看视频| 国精品一区二区三区| 激情成人av| 亚洲二区精品| 亚洲人成在线免费观看| 亚洲精品在线视频观看| 中日韩美女免费视频网站在线观看| 9l国产精品久久久久麻豆| 中日韩美女免费视频网址在线观看 | 国产精品成人免费精品自在线观看| 欧美视频一区在线观看| 国产精品免费网站在线观看| 国产免费成人av| 国产在线一区二区三区四区| 在线播放视频一区| 亚洲精品视频中文字幕| 亚洲午夜小视频| 久久福利视频导航| 欧美国产日韩一区二区| 99国产精品一区| 亚洲欧美日韩综合| 久久综合伊人77777| 欧美精品激情在线| 国产精品色一区二区三区| 欧美精品日韩| 国产亚洲一区二区三区| 亚洲欧洲在线免费| 国产精品尤物| 在线成人激情视频| 一本久道久久久| 久久久7777| 亚洲日本成人网| 午夜在线精品| 欧美日韩播放| 国产又爽又黄的激情精品视频 | 欧美电影免费| 国产欧美一级| 亚洲免费观看高清完整版在线观看熊 | 国产亚洲一区二区精品| 亚洲精品日韩在线观看| 欧美亚洲一区二区在线| 欧美激情成人在线| 亚洲欧美日韩网| 免费av成人在线| 国产免费一区二区三区香蕉精| 亚洲人成精品久久久久| 久久九九免费视频| 日韩亚洲欧美中文三级| 久久米奇亚洲| 国产一区二区三区不卡在线观看 |