王堯
摘 要FPS游戲引擎中應(yīng)用到的數(shù)學(xué)模型很多,貫穿在整個引擎中,此文對引擎中常用的數(shù)學(xué)模型進行分析。
【關(guān)鍵詞】FPS游戲引擎 數(shù)學(xué)模型
1 前言
FPS游戲又稱為第一人稱視角射擊游戲,該游戲引擎中涉及到大量的數(shù)學(xué)模型。下面我們就對引擎中常用到的幾個數(shù)學(xué)模型進行分析。
2 引擎中的數(shù)學(xué)建模
在引擎中,定義了大量的三維空間中的幾何元素。在引擎中依托三維坐標系對三維的點、向量、拋物線、矩陣等元素的位置關(guān)系做了定義和判斷。
2.1 三維坐標系
在引擎中三維坐標系是最為常見的數(shù)學(xué)模型之一。一般用于確定非玩家控制角色、游戲環(huán)境中的建筑、動植物等游戲模型的定位,以及玩家所控制的游戲角色的視野方向,移動方向,以及一些基本動作等。在引擎中坐標系不是唯一的,整個游戲大世界有著自己固定的坐標系系統(tǒng),用以定位游戲場景的中所有不能夠移動或者暫時靜止的物體,而游戲場景中能夠移動的物體又有著自己相對獨立的坐標系嵌套在游戲大世界的坐標系之中,但是該游戲人物在游戲大世界中還是有著相對應(yīng)的坐標,仍然可以通過游戲大世界的坐標進行定位。例如玩家在操縱游戲人物的時候,坐標系是以玩家所操縱的游戲人物模型為中心,隨著玩家對游戲人物的操縱做出調(diào)整,自己在游戲大世界中的坐標也會跟著改變。自動尋路功能也是依靠坐標系來實現(xiàn)定位的,通過坐標系確定起始位置和目標位置,然后計算出從起始位置到目標位置的最佳路徑,以實現(xiàn)自動尋路功能。
比較常見的三維坐標系的表示形式是笛卡爾坐標系。由X,Y,Z三條互相垂直的坐標軸組成。三條坐標軸可以構(gòu)成X-Y,X-Z,Y-Z這個三個平面,因此,此類型的坐標系一共有8個卦限及8個被分割出來的子空間,這些子空間又決定了引擎中的天空盒或者游戲世界界限的構(gòu)成。
該坐標系分為兩種:左手坐標系、右手坐標系。左手坐標系Z軸指向X-Y兩軸構(gòu)成的垂直平面內(nèi),右手坐標系Z軸指向X-Y兩軸構(gòu)成的垂直平面外。
2.2 點
在游戲中涉及到人質(zhì)營救任務(wù)的場景時,將會用到點的概念。人質(zhì)周圍敵對NPC的活動或是巡邏是有一定范圍的,玩家控制的游戲角色與任務(wù)觸發(fā)地點之間的距離是任務(wù)是否觸發(fā)的判斷依據(jù),當玩家控制的游戲角色靠近一定的距離時觸發(fā)營救任務(wù),敵對NPC觸發(fā)阻礙營救任務(wù),當角色脫離超過一定的距離后,營救任務(wù)的觸發(fā)解除,敵對NPC回歸正常的巡邏距離;當人質(zhì)營救成功時,人質(zhì)將跟隨角色移動,這時也要判斷兩者之間的距離,用以實現(xiàn)跟隨傳送功能。
可以使用公式:
來判斷物體跟物體之間的距離。
2.3 三維游戲引擎中的向量
向量有兩個主要的屬性:長度和方向(長度也稱為?;蛘呤谴笮。?。向量經(jīng)常用在對長度相等,方向一樣的物體進行建模,例如粒子系統(tǒng)中表示粒子的運動速度和加速度等,可以用向量來表示它的方向和速度,因為向量有兩個值可以表示它的速度和方向。在對攝像機進行操作的時候也可以用到向量。
但是在使用向量的時候要注意一點,向量的兩個屬性沒有代表位置的,所以在判斷兩個向量是否相等的時候只要判斷長度和方向是否相同就可以了,如果一樣就認為他們是相等的。
在三維空間中向量V可以用三元組V=(x,y,z)表示,但是要注意這三點的起始點和方向。如圖1如所示。
所以可以把由x,y,z三點構(gòu)成的有向線段的長度看成是該向量的大小。計算公式:。
在游戲中,表示移動的距離時,也可以用向量來解決問題。在游戲世界中必須先為向量設(shè)置一個長度單位,用來表示具體的距離問題。
2.4 拋物線問題
在FPS類的射擊游戲中,將會大量的使用到拋物線。如:子彈的彈道,手雷扔出去的軌道,彈殼的掉落,物品丟棄等大量用到拋物線的原理來實現(xiàn)。
拋物線的線條形狀是由頂點和拋物線的對稱軸來決定的。
對稱軸垂直的拋物線方程:y=c(x-h)2+k頂點是(h,k),對稱軸為x=h
對稱軸水平的拋物線方程:x=c(y-h)2+h頂點是(k,h),對稱軸為y=h
常數(shù)c代表了拋物線的開口方向和開口大小。
如果c是正數(shù),對稱軸垂直的拋物線的開口向上,對稱軸水平的拋物線的開口向右。如果c是負數(shù),對稱軸垂直的拋物線的開口向下,對稱軸水平的拋物線的開口向左。c的絕對值越大,開口越小。
在引擎中使用的時候還要考慮到物體在現(xiàn)實世界中的體積,重量等因素,以及它們掉落時的情況,將它們的拋物線正確的模擬出來,增強游戲的真實性。如手雷扔出去到掉落的,也是一條拋物線,這時候就要考慮到手雷的在扔出去時的各種情況,以實現(xiàn)較為真實的模擬。
2.5 矩陣問題
在游戲中矩陣是用來實現(xiàn)變換和仿射的。
變換:在三維空間中物體實現(xiàn)上下、左右以及前后的6個不同方向的移動,放大、縮小和旋轉(zhuǎn)等運動操作。
仿射:物體在三維空間中發(fā)生運動操作后應(yīng)該保持先前的形狀。
物體的運動與矩陣的關(guān)系:
2.5.1 移動——前后、上下、左右的移動
物體的移動可以是使用矩陣的加法來實現(xiàn)。
矩陣的加法運算是把物體移動前和移動后的相對應(yīng)的位置元素(三維空間中的3個位置元素)相加,設(shè)定在三維空間中存儲位置的結(jié)構(gòu)是一樣的,利用向量在引擎中實現(xiàn)。相當于對x,y,z三個坐標軸進行相加運算。游戲角色在場景中的運動就是通過獲取當前位置的坐標與目的地位置的坐標,再通過矩陣加法來實現(xiàn)。
利用矩陣加法實現(xiàn)物體移動:
2.5.2 物體的放大和縮小
在引擎中,可以利用矩陣的乘法對物體進行放大和縮小操作,如狙擊槍瞄準器中的放大圖像,玩家通過鼠標滾輪實現(xiàn)游戲畫面的縮放等。
對物體的放大和縮小操作可以理解為對物體的所有的頂點進行成放大和縮?。ㄟ@邊頂點的的放大和縮小指的是頂點的在三維空間中的坐標),由于2點構(gòu)成一條直線,頂點進行縮放,也就是變相的實現(xiàn)了對物體的縮放。
使用矩陣乘法實物體縮放變換:
其中,fx為x軸方向的縮放指數(shù),fy是y軸方向的縮放指數(shù),fz是z軸方向上的縮放指數(shù)。
如果想實現(xiàn)成比例的縮放,那么fx,fy,fz這三個縮放指數(shù)必須相等。
在引擎中,設(shè)定最大放大倍數(shù)為十倍,fy是y方向上的縮放因子取值為1-10表示放大,-1-10表是縮小,0表示不變。
2.5.3 物體的旋轉(zhuǎn)
在引擎中,可以利用矩陣的乘法對物體進行旋轉(zhuǎn)操作。如在游戲場景中創(chuàng)建武器的時候,武器以一定的速度按照某個角度在空中旋轉(zhuǎn),以便玩家能夠從不同的角度觀察該武器。
在三維空間中,物體的旋轉(zhuǎn)跟xz,yz,xz這個三個平面有關(guān)。假設(shè)xy平面面向計算機屏幕前面的玩家,那么物體旋轉(zhuǎn)時按所在的不同平面位置來分,可以分為3種情況:
(1)繞x軸旋轉(zhuǎn)
繞x軸旋轉(zhuǎn)時,x的坐標值不會改變。
(2)繞y軸旋轉(zhuǎn)
(3)繞z軸旋轉(zhuǎn)
繞z軸旋轉(zhuǎn)的角度為正,由屏幕內(nèi)指向屏幕外。
2.6 圓和球
一條線段有A,B兩個端點,如果以A端點為支點,繞著這個支點在一個平面內(nèi)旋轉(zhuǎn)一周,那么這條線段B端點的運動軌跡形成的圖形把它稱作圓,A,B兩點構(gòu)成的線段叫做半徑,A端點叫做圓心。
圓的方程:,圓心,半徑r。
圓形以自己的圓心為重點,以直徑作為對稱軸旋轉(zhuǎn)一周構(gòu)成的曲面叫做球。
球體的方程:
,圓心是,半徑是r。
在游戲中的碰撞檢測,可以使用圓或者球體邊界之間是否相交來實現(xiàn)。當然也可以利用其他圖形來實現(xiàn)碰撞,但是圓或者球體在檢測的效率上高于其他類型的圖形。通常作為外圍檢測。
如果兩個圓形之間,它們之間的圓心的距離小于或者等于兩個圓形的半徑之和,那么就可以判斷發(fā)生了碰撞。
假設(shè)兩個圓形的方程為:和。如果那么兩個圓形發(fā)生了碰撞。
在游戲中,子彈從槍口出發(fā)到觸碰到物體,需要對子彈和目標物體進行碰撞檢測,用以判斷是否擊中目標,在確定擊中目標后,再利用碰撞物體之間的坐標得出發(fā)生碰撞時的具體位置,對該位置進行判斷,計算出產(chǎn)生的傷害值。
碰撞檢測在自動尋路功能中也能用的到,自動尋路功能的原理是在游戲角色和目標地點之間尋找一條能夠到達的最佳路徑,在尋路過程中會觸碰到場景中的其他物體,這時就需要對觸碰到的物體進行碰撞檢測,判斷該物體是否允許穿過。
3 結(jié)語
以上介紹的數(shù)學(xué)模型是FPS游戲引擎中常見的數(shù)學(xué)模型,廣泛運用在游戲環(huán)境,人物動作以及粒子系統(tǒng)等的設(shè)計中,它們之間互相依存,缺一不可。
參考文獻
[1]Greene Kelly.Laser game tags Matthews,competitor eyes market.The Business Journal,1994,8(51):3.
[2]Hyunuk An,Yutaka Ichikawa,YasutoTachikawa,et al.Comparison between iteration schemes for three-dimensional coordinate-transformed saturatedunsaturated flow model.Journal of Hydrology,2012,470-471:212-226.
[3]Hong.Jeong Min,Kim.MoonHee,Lee.GueMyung.On vector matrix game and symmetric dual vector optimization problem.Fixed Point Theory Appl,2012:233.
[4]Hong.Jeong Min,Kim.MoonHee,Lee.GueMyung.On vector matrix game and symmetric dual vector optimization problem.Fixed Point Theory Appl,2012:233.
[5]E.V.Chizhonkov.Iteration in a subspace for solving matrix games.Computational Mathematics and Mathematical Physics,2012,52(09):1221-1232.
[6]唐亨,張文彬.矩陣的循環(huán)置換[J].西南農(nóng)業(yè)大學(xué)學(xué)報(社會科學(xué)版),1996,1:60-66.
[7]田麗華,姚鑫.虛擬場景中基于矩陣變換的碰撞檢測技術(shù)[J].科技創(chuàng)新導(dǎo)報,2009,30:47-49.
[8]LAI K-C.KANG S-C.Collision detection strategies for virtual construetion simulation.Automation in Construction,2009,18(06):724-736.
作者單位
福建江夏學(xué)院電子信息科學(xué)學(xué)院 福建省福州市 350108