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