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

麒麟子

~~

導航

<2013年2月>
272829303112
3456789
10111213141516
17181920212223
242526272812
3456789

統計

常用鏈接

留言簿(12)

隨筆分類

隨筆檔案

Friends

WebSites

積分與排名

最新隨筆

最新評論

閱讀排行榜

評論排行榜

[原]譯:一個游戲引擎所應具有的元素

原文:http://www.flipcode.com/archives/Elements_Of_A_Game_Engine.shtml
Introduction (簡介)

現在我們來說說你將如何寫出一個支持華麗特性的3D引擎。你的引擎需要提供的包括:曲面(curved surfaces)、動態光(dynamic lighting)、體積霧(volumetric fog)、鏡面(mirrors)、入口(portals)、天空盒(skyboxes)、頂點Shader(vertex shaders)、粒子系統(particle systems)、靜態網格模型(static mesh models)、動畫網格模型(animated mesh models)。如果你對上面這些都很熟悉了,你也許急著把這些東西整合到引擎當中。9 h: z( V0 G* m) m6 Z0 i p% a

但是請稍等!在你開始寫代碼前,你必須先思考一下你將用你的引擎來做什么。通常情況下,你應該想拿來做游戲,但如果你馬上就開始寫你的引擎,你會死得很慘,到后期你可能會因為要增加新的特效和控制重復編寫大量的部分代碼,最后很有可能以失敗而告終。所以事先思考一下你的引擎設計,會為你節省大量時間和麻煩。你也不要一開始就指望建立一個大的工程,這樣你可能也會力不從心,最后不了了之。其實這是一個學習所有東西的辦法,從小從起,因為人無完人,所以,你最好是能完成你的項目,那樣你會感到很自豪。

 

工具/數據

在開發的時候,你可能會需要一些數據,但不幸的是,如果用txt文件來定義一個立方體,是一件非常不容易的事情。所以,至少你得要一個3D建模軟件(3d model editors),關卡編輯器( level editors)和圖形程序(graphics programs)。這些東西都可以買到,但你也可以在網上找一些免費的。但更不幸的是,你有可能會需要更多網上沒有的工具,所以,就需要你自已寫了。如果你在網上找不到你想要的關卡編輯器時,你就需要自已寫一個了。你還需要寫一些代碼來打包你的文件。因為要面對成百上千的文件是一件痛苦的事情。你還需要寫轉換器或是插件來將你3D建模軟件導出的文件格式轉換成你自已的。你還需要一些其它工具來處理你的游戲數據,比如能見度分析,光照貼圖等。: j; O1 }1 }3 |) _2 K. L

有一個基本規律,那就是有可能你寫工具的時間,可能比和寫游戲花同樣多的時間,或者說更多。前期你可以找你想要的工具和文件格式來用,但是總有一天你會意識到,對于你的引擎來說那些東西太普通了,于是你會意無反顧地寫你自已的專用版本。

 

雖然使用現成的東西已經成習慣,但你應該注重你的代碼質量。因為也許有一天有人想要使用,擴展或是修改你的工具。特別是如果你將要把你的引擎發布成開源,或是可以讓人隨意修改的時候,你更應該注意。( j3 R. T+ `' w9 _8 o
% x# Z) ^  K+ g
有可能你會花時間去做圖形,關卡,聲音,音樂和模型,工作量也和你寫游戲,工具,引擎差不多。

 

系統是你的引擎和機器交互的部分,如果一個引擎寫得非常好的話,那么將它從一個平臺移殖到另一個平臺,應該只會改動與系統相關的部分。系統包含了許多子系統,其中包括圖形,輸入,聲音,定時器和配置。主系統負責初始化,更新和關閉這些子系統。( z v+ W4 v3 K; q$ v" B

圖形子系統:它是一個非常直觀的子系統,它就負責把東西顯示到屏幕上。許多人都采有OPENGL,D3D,Glide或是軟渲染等圖形API來實現。但如果做得更好的話,你應該實現多種圖形API的接口并在它們上面設置一個圖形層,這樣用戶可以有多種選擇,也提高了性能和兼容性。這個東西會有一點難度,特別是因為不是所有的圖形API都擁有同樣的結構。。。

輸入子系統:它將獲取所有的輸入(Keyboard, Mouse, Gamepad and Joystick)并統一進行相應的控制。例如:在游戲邏輯中,用戶希望向前移動他的位置。比起逐個檢測輸入類型并處理來講,更好的做法是調用子系統,由子系統完成透明的設備檢測過程。用戶與玩家可以非常自由地切換輸入裝置,這樣玩家就可以很容易地通過不同的輸入裝置來獲取同一行為。

聲音子系統:它負責載入、播放聲音。該子系統功能非常簡潔明了,但當前很多游戲都支持3D聲音,實現起來會稍許復雜一些。1 e9 Z  F8 @8 C. R% m7 Q% T

3D 游戲引擎中很多出色的表現都是基于“時間系統”的。因此你需要一段時間來好好構思一下這個系統。即使它非常的簡單,(游戲里)基本上所有東西都是通過時間觸發來做移動變化,所以,如果你設計得比較好的話,就可以少寫很多冗余代碼。4 ~3 j  l" z/ I- ^# c

配置系統:位于所有子系統的頂端。它負責讀取配置文件,命令行參數, 或是實現修改設置(setup)。在系統初始化以及運行期間,所有子系統都將一直與它保持通訊。比如:切換圖象分辯率(resolution),色深 (color depth),綁定按鍵(key bindings),聲音支持選項(sound support options),載入游戲等。這個系統將這些實現顯得格外的簡單和方便。如果你的引擎支持配置系統,那這調試和測試就方便多了,玩家與 用戶也可以方便地選擇他(她)們喜歡的運行方式。

控制臺
我知道所有人都樂意去跟風做一個象Quake那樣的控制臺系統。但這的確是一個非常好的想法。通過命令行變量與函數,你就能夠在運行時改變你的游戲或是引擎的設置,而不需要重啟。開發期間輸出調試信息也非常的有效。很多時間你都需要測試一系列變量的值,將這些值輸出到控制臺上要比 運行一個debugger速度顯然要快得多。你的引擎在運行期間,一旦發現了一個錯誤,你不必立即退出程序。通過控制臺,你可以做些非常靈活的控制,并將 這個錯誤信息打印出來。假如你不希望你的最終用戶看見或是使用該控制臺,你可以非常方便地將其隱藏,有人看得見就奇怪了。  ^2 l @8 H, d3 }: A

支持系統% `9 w1 m3 q; Q; F# ^. p' Z, U
   這個系統在你引擎中到處都在用。它包含了你引擎中所有的數學成分(點,面,矩陣等),(內)存儲管理器,文件載入器,數據容器(假如你不愿自己寫,也可以使用STL)。該模塊任務針對于基礎和底層,你也可以將它復用到其它相關項目中去。

渲染器/引擎內核
( ~是的,每個人都喜歡渲染3D圖形。但是渲染一個3D世界有太多不同方法,那想要描述清楚所有圖形管線工作的情況實在是太難了。

 

所以,暫時不管你如何實現渲染器吧,最重要的事情是讓你的渲染器組件建立起來,并保持清析的結構。確保你的模塊界線分明(不要把這個模塊的放到哪個模塊了,要放對哦)。我試著將渲染器拆分為以下幾個部份:可見性(Visibility)、碰撞檢測與反饋 (Collision Detection and Response)、攝像機(Camera)、靜態模型(Static Geometry)、動態模型(Dynamic Geometry)、粒子系統(Particle Systems)、公告板(Billboarding)、網格(Meshes)、天空盒(Skybox)、光線(Lighting)、霧 (Fogging)、頂點SHADER(Vertex Shading)和輸出(Output)。( Z6 z" n( o4 E5 g ]
) e4 \6 Y$ E, X2 }
所有的這些子模塊都需要一個接口,用來更改它的設置,位置,朝向以及其它的一些與系統相關的設置

 

設計這個子系統的時候,主要克服的困難就是防止特性膨脹,因此,你應該在設計期間決定你想要實現什么樣的特性。如果到最后你發現你不得不新增加特性的話,那說明你先前的設計很爛。

一個好而方便的事情就是你將所有的三角面最終提交給渲染管線中同樣的點。(不是同一時間一個三角形,我是說三角形構成的方式 lists, fans, strips等等)多花一些時間讓所有物體的具有同一格式,這樣它們就都能使用相同的光照計算、霧、以及填充代碼。但是到最后你會很高興,因為這樣你就能非常便利地僅通過切換材質與紋理id就使任何多邊形具有不同的渲染效果。" h1 t6 g9 P3 J w

這不會對具有多種點的物體繪制造成影響,但是一旦你不當心,它可能會導致大量的冗余代碼。7 n# [ b4 I, S4 u1 I. n3 V
/ A# m) a# H2 a: M" T* Q1 l# G
你最后會發現,當你實現所有這些NB的效果后,你的工作才做了15%或更少。這是就對了,圖形效果在一個游戲引擎中的比重不大。

 

游戲接口- Z9 E4 `, b9 u+ ^
1 X) P W; E* _2 q' j5 f
一個3D游戲引擎最重要的就是它是一個游戲引擎,不是游戲。具體的游戲中的組件將不會被放到游戲引擎中去。在游戲引擎與游戲之間有一些薄薄的層(接口)。這樣能夠保持引擎的結構清析,也能讓引擎能夠便于使用。這是一些額外的代碼,但是它使游戲引擎能夠被復用并且可以使用腳本語言輕松地控制游戲邏輯,或者把游戲代碼放到一個庫中。如果你嵌入你的游戲邏輯到你的引擎中,那你以后想復用的時候,就不要幻想可以直接用了。

 

我想到現在你最迷惑的應該就是介于游戲和引擎之間的那層接口提供了些什么。答案是:控制。引擎的任何部分都有一些動態屬性,因此,游戲/引擎層便是用來修改這些屬性的一組相關接口。這些屬性包括了攝相機,模型屬性,光源,粒子系統,物理,播放聲音,播放音樂,處理輸入,更改關卡,碰撞檢測和反應,移動一個2D圖片到頭上顯示,屏幕標記等等。基本上,如果你想要你的游戲能夠做這些事情,你的引擎就需要提供一個接口來讓游戲邏輯使用。

  b
游戲% y7 l+ E+ b4 K2 I* L
6 [6 L# f" }! K; F
這里,我無法告訴你如何去寫你的游戲。這該輪到你了。如果你已經為你那令人贊異的引擎設計出了一套出色的接口的話,我想你在編寫游戲過程中一定會少很多麻煩。9 s W2 D: b3 v3 f. b) f
: p+ A4 S3 W- ]
3D游戲引擎設計是一項巨大的軟件工程。一個人也能寫出一個游戲,但這不只是熬一兩個晚上便能搞定的,你很可能會出寫出幾兆的源代碼量。如果你沒有持久的信念與激情,你早晚會放棄。4 y4 g# c. p7 ~$ h1 P+ R+ v
5 S6 q, Z; \! _; `1 o$ I
當然,別指望你的第一次嘗試就能寫出完整的引擎,選擇一個對引擎需求較小的項目。努力,你就能成功。

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/wqjqepr/archive/2010/04/26/5531974.aspx

posted on 2010-04-26 23:34 麒麟子 閱讀(2186) 評論(11)  編輯 收藏 引用 所屬分類: Game and Engine

評論

# re: [原]譯:一個游戲引擎所應具有的元素 2010-04-27 02:15 陳梓瀚(vczh)

以后就寫在word里,然后復制到兩個地方就好了。就不會出現這個問題了。如果下次還這樣那說不定是因為你想宣傳csdn專欄……  回復  更多評論   

# re: [原]譯:一個游戲引擎所應具有的元素 2010-04-27 08:27 小時候可靚了

我試了一下,復制到WORD里還不是要去刪那些符號。。
另外,也是想宣傳一下那個博客!!!  回復  更多評論   

# re: [原]譯:一個游戲引擎所應具有的元素 2010-04-27 09:35 zuhd

我只想說樓主你很ass hole,你要是想備忘,拜托不要發到首頁好嗎!你轉到csdn的那些東西只會浪費大家的時間  回復  更多評論   

# re: [原]譯:一個游戲引擎所應具有的元素 2010-04-27 10:13 小時候可靚了

@zuhd
OK  回復  更多評論   

# re: [原]譯:一個游戲引擎所應具有的元素 2010-04-27 10:14 小時候可靚了

@zuhd
其實,你已經超越這個了,并不代表所有人都是。
有許多人需要看的!  回復  更多評論   

# re: [原]譯:一個游戲引擎所應具有的元素 2010-04-27 10:19 空明流轉

@小時候可靚了
你根本就沒明白你回復的那個哥們兒的意思,謝謝。  回復  更多評論   

# re: [原]譯:一個游戲引擎所應具有的元素 2010-04-27 11:00 小時候可靚了

@空明流轉
好嘛,以后我不在這寫了便是!  回復  更多評論   

# re: [原]譯:一個游戲引擎所應具有的元素 2010-04-27 12:39 Bill Hsu

全文貼過來就是了,
csdn速度巨慢  回復  更多評論   

# re: [原]譯:一個游戲引擎所應具有的元素 2010-04-27 12:58 幻想搭積木

最近頻繁在CPP博客的訂閱里看到你的博文嘛  回復  更多評論   

# re: [原]譯:一個游戲引擎所應具有的元素 2010-04-27 13:19 小時候可靚了

我用WORD寫的都貼了的。。 但我從一些網站上復制我先前發的文章,就會亂碼!!!  回復  更多評論   

# re: [原]譯:一個游戲引擎所應具有的元素 2010-04-27 14:22 ccsdu2009

@幻想搭積木
呵呵我也是啊  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲国产精品一区二区www在线 | 欧美成va人片在线观看| 国产伦精品一区二区三区免费| av成人免费| 久久精品夜色噜噜亚洲a∨| 在线观看日韩欧美| 欧美日韩国产小视频| 亚洲欧美激情视频| 麻豆视频一区二区| 亚洲欧美综合网| 最新亚洲视频| 国产亚洲精品久久久久久| 美国十次成人| 亚洲一区二区视频在线观看| 久久久在线视频| 亚洲影视在线| 在线日本成人| 国产精品一区二区在线观看不卡| 久久久噜噜噜久久中文字幕色伊伊| 最新69国产成人精品视频免费| 久久成人免费日本黄色| 亚洲精品在线免费| 一区二区三区在线观看视频 | 久久婷婷国产综合精品青草| 亚洲乱码精品一二三四区日韩在线| 欧美一区二区三区免费大片| 日韩小视频在线观看| 韩日视频一区| 国产日韩欧美黄色| 国产精品免费久久久久久| 欧美国产日本高清在线| 黄网站色欧美视频| 亚洲一区视频| 亚洲六月丁香色婷婷综合久久| 美女久久一区| 久久久久国产精品人| 亚洲免费综合| 亚洲网址在线| 亚洲一区二区三区乱码aⅴ| 亚洲欧洲美洲综合色网| 永久久久久久| 激情五月***国产精品| 国产欧美一区二区视频| 国产精品乱码一区二区三区| 欧美性猛片xxxx免费看久爱| 欧美日韩一区二区在线播放| 欧美精品 日韩| 欧美精品午夜视频| 欧美另类一区二区三区| 欧美精品激情| 欧美日韩一区二区三区四区在线观看| 欧美高清一区二区| 欧美国产国产综合| 欧美乱大交xxxxx| 欧美日韩免费一区二区三区| 欧美午夜精品久久久久久浪潮| 欧美日韩午夜在线视频| 国产精品高潮久久| 国产免费成人av| 狠狠入ady亚洲精品经典电影| 国产一区二区三区久久久| 国产亚洲美州欧州综合国| 国产一区二区精品丝袜| 激情文学综合丁香| 一区二区三区**美女毛片| 亚洲视频大全| 久久av在线看| 亚洲国产va精品久久久不卡综合| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲三级影院| 午夜视频在线观看一区二区三区| 久久久国产精品亚洲一区| 久久综合激情| 欧美日韩免费区域视频在线观看| 国产精自产拍久久久久久蜜| 在线高清一区| 亚洲欧美日韩人成在线播放| 久久亚洲国产精品一区二区 | 欧美日韩ab片| 国产精品va在线播放| 国产一区清纯| 夜夜嗨av一区二区三区| 亚洲欧美激情在线视频| 一区二区三区国产在线观看| 欧美日韩国产综合久久| 一区二区三区在线观看欧美| 欧美亚洲不卡| 国产精品福利网站| 欧美小视频在线| 国产精品免费aⅴ片在线观看| 国产精品无码专区在线观看| 国产午夜精品在线| 亚洲精品乱码久久久久久| 亚洲一级免费视频| 久久精品亚洲精品| 亚洲乱码视频| 久久精品国产精品| 欧美午夜电影一区| 亚洲日本成人| 在线一区二区三区四区五区| 午夜日韩av| 亚洲日韩中文字幕在线播放| 日韩午夜电影av| 久久久久久999| 国产日韩欧美视频| 亚洲一区欧美一区| 亚洲人线精品午夜| 蜜桃久久av| 精品动漫3d一区二区三区| 午夜视频久久久久久| 日韩网站免费观看| 欧美激情亚洲自拍| 亚洲精品一区二区三区av| 麻豆精品网站| 欧美综合二区| 国语对白精品一区二区| 久久超碰97人人做人人爱| 制服丝袜激情欧洲亚洲| 欧美日本在线播放| 亚洲精品日韩综合观看成人91| 狼狼综合久久久久综合网| 欧美亚洲一区| 欧美午夜大胆人体| 亚洲欧美资源在线| 亚洲欧美另类中文字幕| 国产精品日韩欧美| 欧美在线视频免费播放| 亚洲欧美国产精品va在线观看| 国产精品videosex极品| 在线综合+亚洲+欧美中文字幕| 99国产一区| 国产精品免费在线| 欧美影院成人| 欧美一区二区视频在线| 国产视频精品va久久久久久| 亚洲无吗在线| 久久一区二区三区四区| 欧美顶级少妇做爰| 日韩视频免费观看高清在线视频 | 亚洲国产裸拍裸体视频在线观看乱了| 久久精品国产77777蜜臀| 午夜精品久久久久久久99热浪潮| 国产日韩欧美不卡在线| 久色成人在线| 欧美成人69av| 亚洲无限av看| 欧美在线视频网站| 亚洲国产欧美久久| 一区二区三区国产精华| 国产一区二区激情| 亚洲激情视频在线观看| 国产精品久久久久久久久婷婷| 久久精品视频导航| 欧美理论电影网| 欧美专区18| 欧美激情中文字幕在线| 久久www免费人成看片高清| 久久久久一区| 亚洲摸下面视频| 久久婷婷国产综合国色天香| 亚洲最新视频在线播放| 欧美影院在线播放| 亚洲人成7777| 欧美一区二区三区喷汁尤物| 亚洲乱亚洲高清| 欧美在线亚洲一区| 一区二区三区日韩精品视频| 午夜在线一区二区| 亚洲视频 欧洲视频| 欧美在线观看一区二区| 亚洲午夜精品17c| 久久婷婷国产综合尤物精品| 午夜日韩视频| 欧美揉bbbbb揉bbbbb| 久久性天堂网| 欧美亚州一区二区三区| 亚洲黄色免费网站| 国产亚洲欧美日韩一区二区| 日韩亚洲欧美成人一区| 亚洲国产欧美一区二区三区同亚洲| 亚洲欧美在线免费观看| 在线亚洲激情| 欧美精品久久99| 你懂的国产精品| 国产视频在线观看一区二区三区| 亚洲人午夜精品| 亚洲国产精品视频| 久久精品国产欧美激情| 亚洲免费在线视频一区 二区| 欧美精品在线观看播放| 亚洲第一视频网站| 亚洲国产日韩欧美在线动漫| 欧美中文字幕视频| 久久成人精品电影| 国产精品一区二区a| 亚洲一区二区黄| 日韩视频在线你懂得| 亚洲女爱视频在线| 欧美一区二区三区男人的天堂| 亚洲欧美日韩在线|