日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

游戏引擎导论

發布時間:2024/8/1 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 游戏引擎导论 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本系列文章由zhmxy555(毛星云)編寫,轉載請注明出處。??

文章鏈接:?http://blog.csdn.net/zhmxy555/article/details/8250057

作者:毛星云(淺墨)????郵箱:?happylifemxy@163.com????


一、學完DirectX,我們該干什么?

?

?

淺墨覺得,歷代DirectX龍書的作者Frank Luna在龍書中忽視了非常重要的一方面內容的講解,那就是就是學完了DirectX我們接著該做什么。

這大概是很多懷揣游戲開發夢想的熱血青年們曾經思考過的問題。

?

淺墨也曾經在這問題上迷茫過,也因為沒人指明前路而走了不少彎路。

不過后來在黑暗中不斷地摸索,將荊棘變成坦途之后,終于摸索出了一條正確的道路。

也就是看完龍書《DIRECTX.9.0.3D游戲開發編程基礎》之后,我們需要如何學習,來把學到的知識立體化,最終轉化為開發游戲的實際能力。首先我們需要再看一本書,《Real-Time Rendering》,也就是(RTR)實時渲染技術,目前出到第三版了。(這本書并沒有中文版,大家如果要走游戲開發的道路,讀完龍書之后,剩下基本上都要靠讀英文書了。)

學完龍書,也可以選擇自己喜歡的游戲引擎來接觸并掌握了。看完龍書后淺墨首推學習Irrlicht,然后進階推薦Ogre。兩者都是開源游戲引擎,都有著源代碼提供下載學習,而且網上對這兩種引擎的研究熱情很高,資料豐富,引擎代碼字里行間都是哲思,掌握其中的代碼并納為己用,自己寫出像樣的游戲demo來是不成任何問題的。

?

?

下面,就開始看看我們這篇文章的主角——游戲引擎

?

?

?

二、站在巨人的肩膀上:游戲引擎導論

?

?

1.游戲引擎的起源和意義

?

上帝說,要有光,于是,就有了光。

曾經有一段時期,游戲開發者關心的只是如何盡量多地開發出新的游戲并把它們推銷給玩家。盡管那時的游戲大多簡單粗糙,但每款游戲的平均開發周期也要達到8到10個月以上,這一方面是由于技術的原因,另一方面則是因為幾乎每款游戲都要從頭編寫代碼,造成了大量的重復勞動。漸漸地,一些有經驗的開發者摸索出了一條偷懶的方法,他們借用上一款類似題材的游戲中的部分代碼作為新游戲的基本框架,以節省開發時間和開發費用。根據馬克思的生產力學說,單位產品的成本因生產力水平的提高而降低,自動化程度較高的手工業者最終將把那些生產力低下的手工業者淘汰出局,引擎的概念就是在這種機器化作業的背景下誕生的。

?

簡而言之,因為想用更短的周期開發游戲,省掉重復編寫代碼的功夫,于是便有了游戲引擎。

?

首款的3D引擎誕生于1992年,3D Realms公司/Apogee公司發布了一款只有2兆多的小游戲——《德軍司令部》(Wolfenstein 3D)。之后這款游戲引申為Wolfenstein 3D游戲引擎,這也是史上首款3D引擎,它的作者是大名鼎鼎的約翰·卡馬克,這位id Software公司的首席程序師正是憑借這款Wolfenstein 3D引擎在游戲圈里站穩了腳跟。

在此之后,游戲業界都受此啟發,各式各樣的游戲引擎層出不窮。而各種游戲引擎的出現,使得游戲開發并不需要從零開始,從而使得開發的周期大大縮短,也使開發成本大大降低。

?

游戲引擎崛起,游戲產業的黎明,就此降臨。

?

?

?

2.什么是游戲引擎

?

游戲引擎好比賽車的引擎,是用于控制所有游戲功能的主程序,從計算碰撞、物理加速系統和物體的相對位置,到接受玩家的輸入,以及按照正確的音量輸出聲音等等。無論是角色扮演游戲、即時策略游戲、冒險解謎游戲或是動作射擊游戲,哪怕是一個只有1兆的小游戲,都有這樣一段起控制作用的代碼。

這里我們丟出一個概念。游戲引擎是指一些已編譯好的可編輯電腦游戲系統或者一些交互式實時圖像應用程序的核心組件。這些系統為游戲設計者提供各種編寫游戲所需的各種工具,其目的在于讓游戲設計者能容易和快速地做出一款游戲作品,而不是從零開始寫起,這樣大大縮短了開發的效率,開發的時間和開發的成本。

?

可以這樣說,游戲引擎讓我們站在巨人的肩膀上進行游戲的開發,而不是從零開始。

?

?

?

3.一款完善的游戲引擎的構成

?

我們很大程度上將游戲引擎都理解為渲染引擎,分為2D圖形引擎和3D圖形引擎,其實游戲引擎并不單單指渲染引擎。渲染引擎只是一款完善的游戲引擎最重要的組成部分,而一款完善的引擎,還包含物理引擎,碰撞檢測引擎,音效引擎,腳本引擎,電腦動畫引擎,人工智能引擎,網絡引擎,場景管理引擎以及IO管理引擎等等。

其中,3D引擎的渲染系統通常建立在一套或者多套高級的圖形API之上,比如我們熟知的Direct3D與OpenGL。

?

?

4.DirectX與游戲引擎的區別

?

很多朋友在評論中提到不清楚DirectX與游戲引擎到底有何區別,在這里我們就來展開講一下,其實說起來非常簡單。

首先,DirectX是微軟旗下的一種應用程序接口(API),它為各種品牌的硬件提供了一個共同的硬件驅動標準,無論你是什么牌子的硬件,只要你遵循DirectX約定的準則,用DirectX這套API開發出來的游戲就可以在你的硬件上很好的運行。DirectX,我們可以理解為他為硬件驅動。而Direct3D,只是DirectX之中負責3D圖形渲染的一個組件而已。

?

游戲引擎是為了實現一款游戲雛形而編寫的一系列可重用的代碼,很多游戲引擎的渲染部分實現了對Direct3D的封裝。我們可以理解游戲引擎為一系列的軟件代碼,而我們利用游戲引擎中已經現存的代碼,開發起游戲來就能事半功倍。

?

所以,綜合一下。

DirectX可以理解為硬件的驅動,它為各種品牌的硬件提供了一個共同的硬件驅動標準。

游戲引擎,是一系列構成一款游戲的可重用的代碼,是用于控制所有游戲功能的主程序,游戲引擎的前身可為一款完整的游戲作品。

?

?

?

5.人氣開源游戲引擎介紹

?

想事半功倍地開發出屬于自己的游戲,在選擇游戲引擎上是必須要下足功夫的。

多半的游戲引擎都開源且免費授權的,也就是說,如果我們采用某款開源游戲引擎開發出了自己的游戲,無需任何費用,只要在我們的游戲作品中表示,使用了什么引擎來進行游戲開發的就可以了。也就是我們經常在很多游戲片頭會看到的logo。Power by XXX,比如Power by Ogre。下面我們就來介紹幾款目前比較火熱的開源游戲引擎,我們用他們進行游戲開發是完全免費的:

?

Ⅰ.Irrlicht Engine

Irrlicht Engine(鬼火引擎)始于2003年,次年即被評為最佳開源游戲引擎。它具有高性能的實時3D引擎,用C++編寫,也可用于.Net語言。拓展語言綁定包含java,perl,ruby,python.跨平臺支持,使用D3D,OpenGL以及自帶API. Irrlicht Engine可以在移動平臺Android以及iOS上使用。值得一提的是,鬼火引擎有專門的Andorid版。

其功能特點可以與商業3D引擎相比。優點是容易掌握,好學。新手入門建議學習Irrlicht

?

Ⅱ.Ogre

OGRE(面向對象的圖形渲染引擎):OGRE是用C++編寫的,以現場為導向,靈活的三維引擎,它主要用于那些利用硬件加速的3D圖形應用程序。它的類庫提取了所有基礎系統庫的細節,如Direct3DOpenGL?,并提供了一個基于世界對象和其他直觀類的界面。Ogre支持跨平臺,也就是說,Ogre理論上可以在Android以及iOS等移動平臺上使用,不過需要進行相關的移植。

Ogre人如其名,完全采用面向對象的思想來進行設計,整體結構顯得非常優雅,宛如一件藝術品。在開源游戲引擎中,Ogre有著最華麗的渲染質量,可以和大多數3D商業引擎的渲染效果一較高下。淺墨非常喜歡這款開源引擎,只可惜它僅僅是圖形引擎,而不是功能全面完整的游戲引擎。值得一提的是,?目前非常具人氣的ARPG游戲《火炬之光》系列就是采用的Ogre引擎。

這里我們貼一些2012年9月20日剛上市的《火炬之光2》的游戲美圖:

?

好了,看完絢麗的游戲截圖,下面我們繼續來學習。相信總有一天,我們也可以親手寫出這樣優秀的游戲作品出來。

?

?Ⅲ.Delta3D

Delta3DDelta3D是一個功能齊全的游戲引擎,可用于游戲,模擬或其他圖形應用。其模塊化設計集成了其他的開源項目,如開放場景圖開放動力學引擎人物動畫庫‘OpenAL’?Delta3D把這些開源項目集成到一個易于使用的應用程序編程接口中。

?

?

Ⅳ.NeoEngine
NeoEngineNeoEngine是一個全功能的用C++編寫的開源3D三維游戲引擎。該引擎是多平臺的,包括OpenGLDirectX渲染功能,支持WindowsLinuxMac OS X系統,它提供了場景管理,頂點和像素著色,骨骼動畫和物理,腳本以及一個完全集成的工具鏈。
?


Ⅴ.Bullet
BulletBullet是三維游戲多重物理庫,提供最先進的碰撞檢測,柔軟身體和剛體動力學。這個游戲引擎被許多AAA級的游戲公司用在PS3?Xbox 360?,任天堂的Wii、以及PC?。這個庫可以免費用于商業用途。


?

Ⅵ.Power Render
Power RenderPower Render是一個為游戲和3D圖形準備的軟件開發工具包。它為開發者提供了一個API,為美工準備了一些工具,這些工具可以實時預覽3ds MaxMayaLightwave的模型。新版本還可以預覽高動態范圍成像并支持OpenEXR文件格式。下載?Power Render 6?35.1MB exe)。?

?

?

6.一些思考

?

很多朋友也會想到,既然都有了現成的游戲引擎為我們封裝好各類DirectX和OpenGL的庫函數,甚至做出了各類可視化的設計工具,讓我們無需了解調用的細節就可以用這些工具來制作出自己的游戲,那我們是不是就不用去學習圖形API,也就是不用去學習Direct3D(或者OpenGL)了?

一千個人人眼中有一千個哈姆雷特。

如果你是本著快速開發一款游戲就完事交差的心態,知其然不知其所以然,DirectX其實并不用去學習,直接去學習一款好的游戲引擎的SDK就可以了。

如果你是本著學習求知的心態,想要把游戲開發的各方面知識和細節做到心中有數,甚至以后想自己寫一款游戲引擎,DirectX(或者OpenGL)是必須要學的。學完DirectX(或者OpenGL)之后,再來接觸一款游戲引擎,接觸它的源碼,我們就有資本看懂這些源碼的實現細節,就可以很容易地把這款游戲引擎使用DirectX(或者OpenGL)進行渲染的細節脈絡看得清清楚楚。經常我們還涉及到了各種不同版本硬件渲染的支持問題,比如DirectX 8與DirectX9,這時候就會考驗我們對圖像API的掌握情況。 同樣,掌握了DirectX(或者OpenGL)更利于我們對渲染的優化。

?

?

?

?

?

7.市面上各類游戲引擎的列舉

?

最后,下面我們列舉出市面上存在的游戲引擎,點擊各個引擎的名字就可以跳到相應的引擎官網地址了。

需要指出的是,這里的引擎有的只是圖形引擎,有的只是物理引擎,也就是說并不都像那些完善的商業引擎,比如虛幻3引擎(Unreal Engine3)一樣,具有完善而功能全面的物理引擎,碰撞檢測引擎,音效引擎,腳本引擎,電腦動畫引擎,人工智能引擎,網絡引擎,場景管理引擎以及IO管理引擎等等。

?

?

開源2D引擎:

?

  • cocos2d
  • d2d
  • ika
  • AGen
  • gosu
  • Mokoi Gaming
  • LOVE
  • Gosu
  • PTK
  • Thousand Parsec
  • PPTactical Engine
  • elf2d
  • Daimonin MMORPG
  • Blackthorn
  • lastexpressengine
  • tamy
  • stardust
  • ruge
  • MAGE
  • Edge Game Engine
  • Orx
  • chingu(Ruby)
  • HGE
  • FlatRedBall
  • DxIce
  • exgine(dephi)
  • Entropia
  • OSARE
  • ProtoEngine(Javascript)
  • mofe
  • tonk(Python)
  • Bismuth Engine
  • retroremakes-framework
  • scage(Scala)
  • ArcLib
  • tIDE
  • flamingoengine(Python)
  • Ethanon
  • angel engine
  • FIFE project
  • Novashell
  • Weaver(Linux)
  • verge 3
  • GTGE
  • ArcEngine

    ?

    ?

    ?

    開源3D游戲引擎

    ?

  • Ogre
  • Crystal Space
  • Delta3D
  • Irrlicht Engine
  • CHAI 3D
  • Cafu Engine
  • ZFXCEngine
  • Q3Viewer
  • Drag[en]gine
  • DUMB(Linux)
  • DXQuake3
  • Brume
  • Open Toolkit
  • RaydiumEn
  • PySoy (Python)
  • pygame(Python)
  • BlendELF
  • Ambrose3D
  • AgateLib(.NET)
  • D’Enfent Engine
  • Asphyre Sphinx(Delphi)
  • pyggel(Python)
  • NeoEngine
  • Horde3D
  • ika
  • Lightfeather
  • syBR Engine
  • SoftPixel Engine
  • SED
  • RomantiqueX(XNA)
  • GLOBE_3D
  • NeL Engine
  • NewWorld3D
  • M0TE
  • MUD Designer(C#)
  • Muli3D
  • Linderdaum
  • Lilith3D(Geo-Morphing)
  • Entropia Engine
  • SxDL
  • APOCALYX 3D Engine
  • Genesis3D
  • QuakeForge
  • NetGore (C#)
  • Stratagus
  • SDL
  • PLIB
  • ClanLib SDK
  • GLFW
  • Allegro
  • 3DzzD
  • Jad Engine (C#)
  • Agar
  • 6DX 3D Engine
  • OSG
  • Cube 2: Sauerbraten
  • SCEngine
  • vbGORE
  • TNT Basic
  • nebula3
  • Sphere RPG engine.
  • GhostEngine
  • Hazy Mind(XNA)
  • nagine3d
  • mako engine
  • aeon3d
  • mcore3d
  • tubras
  • mgep
  • Sylphis3D
  • Yage
  • XreaL
  • Q 2.0
  • Quesa
  • Reactor3D(XNA)
  • Metrolog Xg
  • plush
  • Lystra Engine
  • LightFire(C#)
  • LEAF2
  • Lightning Engine
  • jMeteor
  • QBasic
  • Lightspeed 3D(MacOS)
  • Protea
  • Original3D
  • Purple#
  • Cat Mother
  • ExoEngine
  • Poly Engine
  • XEngine
  • Xvizn
  • Yake
  • OpenSpace3D
  • rgdengine
  • ezrpg(PHP)
  • glueengine(C#)
  • G3DRuby
  • netgore(C#)
  • fosengine
  • u-nebula
  • renderengine(JavaScript)
  • ltegameengine
  • axonengine
  • jgge
  • Espresso3D
  • RetinaX
  • Reality Factory
  • gmogre3d
  • prequengine
  • Epee Engine
  • Axiom 3D Engine
  • G3D
  • OHRRPGCE
  • Open Game Engine
  • Baja Engine
  • Blender
  • Irmo
  • Xith3D
  • Soya 3D(Python)
  • Panda3D
  • Quake Engine3
  • Quake Engine2
  • Amaltheia
  • Quake Engine

    ?

    ?

    ?

    商業通用游戲引擎:

    ?

  • Unreal ENGINE3
  • CryENGINE3
  • Gamebryo
  • Vision Engine
  • unity3d
  • Source Engine
  • Shiva 3D
  • Unigine
  • Torque 3D
  • C4 Engine
  • Truevision3D
  • Demoniak3D
  • CSP engine license
  • Codecreatures
  • Buzz 3D
  • 3DSTATE
  • Antiryad Gx
  • Glacier
  • Esperient Creator
  • Lucid
  • ludiloom
  • Luxinia
  • LawMaker
  • GameStart
  • Glint 3D ScriptENGINE
  • Esenthel Engine
  • GameCore
  • Nowhere Engine
  • S2Engine
  • Quest3D
  • Exocortex
  • Frame Simulator
  • Codecreatures
  • worldaxis3d
  • Xors3d
  • VRcontext
  • CPAL3D
  • Ready At Dawn Engine
  • Nytro Game Engine
  • game start3d
  • Visual3D Game Engine
  • Vicious Cycle Software
  • MetaVR
  • Grualia Game Engine
  • Gamestudio
  • BlitzMax
  • Cipher Game Engine
  • Visual3D Game Engine
  • Wild Pockets
  • 3DVIA Virtools
  • Vicious Engine
  • VATAN ENGINE
  • Cobra 3D engine(Cobra )
  • Qube Software
  • FreshEngine(PSP)
  • Shark 3D
  • eye-sys
  • NeoAxis Game Engine
  • DX Studio
  • 3DVIA Virtools
  • Agency9
  • Abyssal Engine

    ?

    ?

    商業MMO游戲引擎:

    ?

  • Hero ENGINE
  • Realm Crafter
  • Zythum-Project
  • Bigworld
  • Chaos Game Engine
  • Prime Engine
  • Multiverse

    ?

    ?

    ?

    Android 2D開源游戲引擎:

    ?

  • AGE
  • Angle
  • cloak
  • Cocos2D
  • juicygames
  • libgdx
  • Rokon
  • mages
  • candroid engine
  • andengine

    ?

    Android商業游戲引擎:

  • Roar Engine

    ?

    Android 3D開源游戲引擎:

  • catcake
  • jPCT-AE
  • kwaak3
  • Gamine
  • Alien3D
  • forget3d
  • Papaya

    ?

    ?

    iPhone商業游戲引擎:

  • airplaysdk
  • PlaytoTv
  • Kanji
  • Shiva Ston3d
  • iTGE
  • Bork 3D
  • Unity For iPhone
  • GameSalad
  • iXors3d

    ?

    ?iPhone開源引擎:

    ?

  • galaxyengine
  • gamekit
  • Oolong
  • SIO2
  • chipmunk-physics
  • card-surface
  • Tec engine

    ?

    關于游戲引擎的部分就講解完了,如果上面的列表有疏漏或者不準確的地方,歡迎大家糾錯。

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    下面我們來回歸到目前的講解進度中來,關于Direct3D的渲染流水線。

    ?

    ?

    ?

    三, Direct3D渲染流水線的兩套體系

    ?

    ?

    在Direct3D中,有兩套實現圖形渲染的方案,第一套為固定功能渲染流水線(fixed function render pipeline),另一套為可編程渲染流水線(programmable render pipeline)。

    顧名思義,從字面上就可以看出這兩套方案的一些端倪出來。下面我們先來分別簡單介紹一下Direct3D中兩套渲染體系的特點和整體思路,給大家一個大體的概念。在介紹之前,有一個必須事先跟大家說清楚的實事,就是在DirectX 10以及DirectX11中,固定功能渲染流水線已經被移除了,而可編程渲染流水線則得到了重用,這反映了一個明顯的趨勢。

    目前,我們主要涉及到DirectX的有三個版本,有DirectX 9,DirectX 10以及DirectX 11。下面我們先分別介紹一下。

    DirectX 9,一路走來,追捧者無數,一手遮天,是目前PC游戲界的中流砥柱,占據著DirectX家族的絕大多數市場份額。

    DirectX 10,這個悲劇的孩子由于搭載了坑爹的操作系統Windows Vista,生不逢時,注定了它此生的坎坷和懷才不遇。

    DirectX 11,這位才華橫溢的孩子,在合適的時間出現在了合適的操作系統——Windows 7上,會在未來幾年內取得不錯的成績。而在國內的話,DirectX 11的普及,估計還得更久。

    ?

    ?

    雖說在DirectX 10以及DirectX11中,固定功能渲染流水線已經被移除了,但是在目前的主流DirectX 9里面,固定功能渲染流水線依然占有著舉足輕重的地位,我們只是會在后面的介紹中淡化它,但我們仍然需要掌握它,以備不時之需。

    最后我們來分別介紹一下這兩套Direct3D的渲染體系吧:

    ?

    ?

    ?

    Ⅰ.固定功能流水線

    ?

    第一套方案,固定功能渲染流水線(fixed function render pipeline)。

    顧名思義,固定功能渲染流水線(fixed function render pipeline)從某種意義上來講是固定的(fixed)。它有著自己的一套準則,關于光照,關于矩陣變換。要進行一個完整而全面的渲染操作,基本上都是按以下步驟進行的:填充頂點數據,指定紋理坐標,設置材質,設置光照,設置變換矩陣,設置渲染狀態,最終繪制圖形。這里先給大家一個步驟上的概念,后續文章中會詳細給大家介紹的。很多時候,我們只需要遵守著這套固定的準則一步一步地進行相關代碼的書寫,就完全可以駕馭這種渲染方法了。我們使用固定功能渲染流水線進行畫面的渲染,說穿了就是根據我們的需要,不斷地通過Direct3D設備指針調用一些Direct3D中預設的函數,比如用SetRenderState()設置各式各樣的渲染狀態,SetSamplerState()設置各式各樣的采樣狀態等等。至于場景的處理和繪制的內部過程我們無需插手,Direct3D的引擎會根據我們設置的各種渲染狀態,自己來完成,非常的人性化。

    由于這種渲染方案在新版的Direct3D中被移除,所以很多時候我們只需稍微了解,在后面,我們會淡化固定功能流水線的使用,而更多地對 “寫shader”進行講解,也就是目前使用廣泛的可編程渲染流水線。

    ?

    Ⅱ.可編程渲染流水線

    ?

    最后,下面我們就來大概了解一下目前的渲染技術的趨勢——可編程渲染流水線。

    ?

    而可編程渲染流水線(programmable render pipeline)就有著很大的不同了。通常我們說的自己寫shader就是指的這套渲染體系,這是目前3D編程的大趨勢。從字面意義上來說,它是可編程的,很靈活,而不是固定的。這樣我們就可以通過代碼的書寫,著手去實現那些在固定功能流水線中不太好實現的技術和效果,從而升華了我們的渲染技術。可編程渲染流水線中的核心,是著色器(shader)。而在Direct3D 9中,我們主要關注的是頂點著色器(vertex shader)和像素著色器(pixel shader)。也就是說,我們為著色器編寫一些規模較小的代碼,然后在GPU上進行編譯和運行,這就是所謂的可編程渲染流水線的精髓。關于我們在可編程渲染流水線中使用的編程語言,是一種編譯和運行在GPU(Graphic Processing Unit)圖形處理器之上的Direct3D中獨有的著色器編程語言——HLSL(High Level Shader Language)高級著色器語言。關于這種著色器編程語言,后面我們會詳細介紹。

    ?

    ?

    關于后續的講解思路,我們會先大致了解固定渲染流水線,然后重點學習可編程渲染流水線,再者,就是選擇一個3D游戲引擎進行系統學習了。

    ?

    以上就是本節筆記的全部內容,更多精彩內容,且聽下回分解。

    ?

    淺墨在這里,希望喜歡游戲開發系列文章的朋友們能留下你們的評論,每次淺墨登陸博客看到大家的留言的時候都會非常開心,感覺自己正在傳遞一種信仰,一種精神。


總結

以上是生活随笔為你收集整理的游戏引擎导论的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。