0.3d fps (第一人稱射擊游戲)
簡述:
當(dāng)今游戲業(yè)的發(fā)展最為風(fēng)光獨(dú)好的莫過于MMORPG(大型多人在線游戲了),這類游戲往往投入巨大,然而收益也是非常巨大。最好的例子就是當(dāng)今最為流行的網(wǎng)游,暴雪公司出品的魔獸世界,一個(gè)巨大的4維世界:3D空間+時(shí)間維度。而這些游戲的前面卻是現(xiàn)在不起眼的單機(jī)3D FPS游戲。(從編程角度看)。
3D FPS起源跟圖形處理芯片有莫大的關(guān)系:ID soft公司的John kamark起用一篇60年代的數(shù)學(xué)論文架構(gòu)一個(gè)BSP樹的3D視圖加速程序在PC機(jī)上運(yùn)行3D視角圖形開始成行3D射擊游戲風(fēng)氣。經(jīng)歷到現(xiàn)在,3D FPS游戲已經(jīng)是一個(gè)相對(duì)成熟的制作產(chǎn)業(yè)。代表作有孤島危機(jī),
使命召喚4,使用成熟的3D game engine制作,效果非常逼真。
而現(xiàn)代一個(gè)普通3D FPS 游戲的制作基本上是使用成熟的3D game engine制作的了。3D ga me engine目前市場上有好多,各種各樣,開源,免費(fèi),收費(fèi)都有,收費(fèi)的有高價(jià)的也有低價(jià)的,相差也比較遠(yuǎn)。目前出名的有unreal game engine && ID Tech game
engine。 當(dāng)然游戲還要其他策劃,美工,劇本的非程序員角色。
原理上game engine就是3D graphics + physics
+ audio + input + script (圖形+物理+聲音+輸入+腳本)5大組件組成, 下面我將一個(gè)一個(gè)講解下,并尋找如何組合它們的方法:
1.3D 視圖渲染世界:
概述:游戲的圖形當(dāng)然的用圖形庫,兩大主流:DirectX && OpenGL. 目前基于windows平臺(tái)的游戲居多。所以DirectX占優(yōu)。我想介紹的是DirectX. 為什么不直接用引擎,因?yàn)橐娣庋b的是也是DirectX,道理一樣。明白DirectX就可以對(duì)引擎的了解達(dá)到一種相當(dāng)?shù)某潭取?/font>
1.1DirectX 簡單概述:
XXXXXX
1.2DirectX的數(shù)學(xué)3D世界
XXXXXX
1.3DirectX的基礎(chǔ)
XXXXXX
1.4實(shí)用DirectX
XXXXXX
1.5GPU編程
XXXXXX
2.物理世界(碰撞檢測)
2.1AABB
3.聲音世界
4.一個(gè)簡單的游戲
4.0 簡述:
簡單的游戲,在一個(gè)盒子里實(shí)現(xiàn)到有目標(biāo)人物的射擊;
4.1 DXUT engine
4.1.1DirectX
SDK 里面包含了一個(gè)簡單的封裝D3D常用功用的類的一個(gè)庫;架構(gòu)如下:
各文件大概解析:
1.DXUT 是管理windows窗口的,還有一些線程的內(nèi)存任務(wù)的管理
2.DXUTEnum是管理設(shè)備的也就是顯卡,
3.DXUTgui是一個(gè)簡單的用戶界面庫
DXUTsettingDlg就是一個(gè)已經(jīng)格式化的一個(gè)管理顯示設(shè)備的對(duì)話框
一個(gè)架構(gòu)圖:
4.DUXTmesh是3D網(wǎng)格文件的管理
5.DXUTTexture是管理紋理的
6.DXUTmis是一個(gè)雜類,有管理數(shù)據(jù)結(jié)構(gòu)體的,有時(shí)間器的,有攝象機(jī)的,有方向管制的。
其中的CFirstPersonCamera 就是第一人稱視角攝象機(jī),用起來很方便
7.DUXTSound是聲音
4.1.2sample
DXUT
4.2 一個(gè)盒子的世界
meshCell
4.3增加一個(gè)東西
4.3.1 射擊球:ammo
struct AMMO_STATE
4元數(shù)世界坐標(biāo)轉(zhuǎn)化
位置
速度
顏色
創(chuàng)建時(shí)間
生命周期
透明
}
4.3.2 怪物:droid
struct DROID_STATE
{
4元數(shù)世界坐標(biāo)轉(zhuǎn)化
位置
速度
顏色
創(chuàng)建時(shí)間
生命周期
透明
離camaer有多遠(yuǎn)
動(dòng)作狀態(tài)
};
4.4 游戲壯態(tài):
一個(gè)游戲應(yīng)該有個(gè)場景管理的結(jié)構(gòu)體,表明當(dāng)前玩家處于游戲的什么狀態(tài),例如,玩家處在設(shè)置游戲的顯示設(shè)置時(shí),那么游戲玩的其他資源就應(yīng)該不那么快創(chuàng)建;
按照我設(shè)想。。就是一個(gè)標(biāo)志位:玩時(shí)為1,設(shè)置其他東西為2,結(jié)束為3.
4.5運(yùn)動(dòng)起來
當(dāng)創(chuàng)建怪物與球體后,就應(yīng)該初始化它們存在的狀態(tài)參數(shù),然后根據(jù)物理定律把握住它們的狀態(tài)(速度,位置,重量。。。)進(jìn)行運(yùn)算再返回結(jié)果給它們。
適當(dāng)?shù)奈锢韰?shù)設(shè)置:
由于是簡單游戲,所以基本上設(shè)置一下世界引力系數(shù),再加上一些碰撞后的缺失,磨擦系數(shù)就可以了
4.5UI
用微軟提供的DXUT庫里面的就基本上足夠了。
4.6 基本程序架構(gòu)
面向?qū)ο笈c全局變量?
基本上整體的結(jié)構(gòu)是使用面向?qū)ο笏枷氲摹?/font>
像攝象機(jī),封裝好一個(gè)類(DXUT庫提供)網(wǎng)格也是。
然而大局里是用全局變量來設(shè)計(jì)的
全局的數(shù)組儲(chǔ)存球體信息與怪物信息;
全局的結(jié)構(gòu)體儲(chǔ)存要渲染的資源。
理由
因?yàn)橐紤]到全局變量可以減少函數(shù)參數(shù)堆棧出入帶來的時(shí)間損失!(3D是每秒楨楨循環(huán),調(diào)用函數(shù)頻繁)
當(dāng)然還有檢索怪物跟球體,把握它們的句柄是相當(dāng)迅速的
4.7全局整體架構(gòu)解析
總有來說就是依靠在DXUT庫上做個(gè)簡單的程序