c语言方框透视原理,FPS游戏的方框透视+自瞄原理
目錄
一,自瞄
準備工作:
計算工作:
準備工作:
計算工作:
一,自瞄
基于所有的FPS游戲,都有一個人物結構,包含人物在地圖上的三維坐標,人物的準心數據。
而實現內存自瞄就是通過查找自己和敵人之前的三維坐標數據,將三維坐標數據轉換為二維的準心數據。
準備工作:
1.查找人物的三維坐標數據:
以CS為例子,進入游戲搜索未知的初始值,一般找一個有箱子或者地勢有高低差的位置,先查找Z坐標數據(在游戲中一般X,Y,Z坐標是挨著一起的+0,+4,+8的關系),跳到箱子上或走向更高的位置,搜索增加的數值,減少高度搜索減少的數值(浮點型),重復最后找到坐標的基址。
2.查找鼠標的準心坐標數據:
一般游戲鼠標準心Y坐標向上會減少,游戲鼠標準心向下會增加,這樣就可以搜索到鼠標的準心Y坐標,-4一般就是X坐標。
3.游戲的俯仰角,偏轉角,翻滾角:
俯仰角:用CS舉例就是抬頭或者低頭的時候角度變換,轉換到游戲的準心數據就是準心Y,一般游戲為-90° ---
90°的范圍
偏轉角:CS中就是人物視角轉動,比如打轉,這個便是游戲的準心數據的X,一般游戲是0° --- 360°
翻滾角:這個舉例就是吃雞里面的左右搖頭角度變換
計算工作:
計算出敵我的X差值 X,以及Y和Z的差值Y,Z。
1.計算出準心的X偏轉角度:
通過arctan(Y /
X)就可以計算出角α的大小,這里可能會想到α的角度在一三和二四象相的tan都一樣的情況:
那么在2象相:
用反正切函數計算出的角度是一個負數,這個時候就應該加上一個180°,得到正確的角度值。
同樣在三象限得到的α值是一個整數,但是應該加上180°才能得到β的正確角度。
2.計算出準心的Y偏轉角度:
因為這是一個三維空間,所以就拿正方體求斜邊一樣,要先求到二維距離(sqrt(x2+y2))在根據z求到角度值:
通過arctan(Z /
二維距離)可以求得α角大小,這個時候要判斷游戲向上俯仰角是減少還是增加,在CS中向上為負數,向下為整數,所以這個α就是一個負的角度
3.移動鼠標準心
求得了以上的兩個角度數據之后,修改準心數據為求得的角度數據,就可以實現自瞄。
二,方框透視
方框透視同樣需要敵人與自己的坐標數據以及準心數據,只是將這些數據進行轉換為二維的屏幕坐標數據。
準備工作:
1,攝像機視角概念:
在3D游戲中攝像機視角:
游戲中攝像機的作用就是移動將攝像機視角中的三維空間中的內容投影到一個平面上,然后顯示給玩家觀看。
2,FOV視場角:
就是攝像機和屏幕的夾角,為FOV,視場角,我們比如CS游戲中準心在屏幕中心起始就是在FOV角的一半位置。
而攝像機對應的屏幕大小就是顯示給我們的分辨率大小,比如1024*768就是長和寬的大小,而當FOV為90°時候,準心中間與屏幕的垂線構成等邊45°直接三角形,這個時候攝像機到屏幕的距離就是一半屏幕長度的大小,要實現方框透視就要將求得的X,Y,Z坐標數據以及準心數據轉換為在屏幕上的坐標,從而實現畫方框。
計算工作:
1,計算出在屏幕上的方框X坐標:
由圖分析可以知道:
X / B = Y / A ?----》
B = X / Y * A
而 X / Y就是tan α 的值,A就是一半屏幕長度的值 * 90 / fov,所以重點就是求α。
α角是鼠標準心X角度和自己和敵人的夾角β的差值(在fov的左邊應該為負數,這樣算出來的tan才是負數,最后加上一半距離才是正確的屏幕坐標X),這個很容易就求得。最后還應該加上屏幕的另一部分,結果就是在屏幕上的X坐標,最后的公式如下:
X_POS ?= ?tan α
* ?(屏幕坐標長度一半)* (90° /
fov)
1,計算出在屏幕上的方框Y坐標:
α角就是鼠標的Y角度數據,這里要和游戲中的相反,向上應該是正,因為這里要求長度。
A還是攝像機和屏幕的距離:
則有:(C+Z) / high = C / tan α ?/
A ?+ 一半的屏幕高度
( A就是一半屏幕長度的值 * 90 / fov
)
最后可以求得:
坐標Y = (tan α + tan β)* A + 一半屏幕的高度
通俗一點的理解就是:
坐標Y = (tan 鼠標Y角度(向上為正,向下為負) + tan 敵我Y夾角)* 一半屏幕長度 * 90 / fov +
一半屏幕高度
最后:
求得了屏幕的X,Y坐標,就能繪制三角形了,至于方框縮放問題,距離越遠方框越小,所以我用反函數來實現,自己游戲中取兩組三維距離和方框長度匹配的數據,計算一下K就行。
總結
以上是生活随笔為你收集整理的c语言方框透视原理,FPS游戏的方框透视+自瞄原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入理解Presto
- 下一篇: 设计模式的理解的总结