簡體   English   中英

游戲中的地形和碰撞

[英]Terrain and Collision in a Game

我正在嘗試創建一個新游戲,其中車輛可以沿着地面行駛,但也可以使用推進器暫時空降。

我是游戲編程的新手,但是我擅長使用Java,C,C ++等進行編碼,因此我認為這不應該成為問題(游戲的第一版是Java)。 我的問題是,我是從頭開始,無法想像地形成為障礙的方法,因此車輛不會從中掉落。 我如何讓他們可能遭受跌倒傷害?

過去,人們已經將我定向到副本島資源,因為它已經包含了副本系統,並且我看到了整個碰撞系統,但是到目前為止,我還無法理解它,我希望有人願意幫我一下

謝謝

羅夫哈

您正在使用什么來開發游戲? 引擎還是圖形庫? 基本上有三個級別(我想考慮一下):圖形庫,圖形引擎和游戲引擎。

  • 圖形庫幾乎可以達到最低級別:OpenGL或DirectX。 當要繪制地形時,您將繪制為三角形網格,並定義這些三角形的頂點等。

  • 圖形引擎是最重要的一層。 這些示例(至少對於C ++)是Ogre3D,Horde3D和Irrlicht。 他們將處理許多較低級別的命令,並讓您從更高級別的角度來專注於圖形。

  • 游戲引擎幾乎會處理與圖形相關的任何事情。 這些示例(還是C ++)是Unity和UDK。 他們通常可以為您做很多游戲編程。 您可能會在建模程序(3dsmax等)中繪制地形,將其導出為某種格式,然后引擎將對其進行處理並確切地知道如何處理。

我已經玩過這三個文件,並發現最有趣的圖形庫。 但是,他們可能會花費最長的時間來制作游戲。 它們還涉及更多的數學(線性代數)。

至於與地形的碰撞檢測。 您必須了解組成該地形的三角形。 如果您使用的是游戲引擎,則應該能夠將地形的網格物體和角色的網格物體存儲在某種“場景節點”中,並且它將自動處理碰撞檢測。 但是,如果您自己處理所有事情,則有許多流行的算法可以做到這一點:

  • 邊界框:即使角色的形狀像人(或動物等)一樣,您也可以將它們視為框,並檢查該框何時與構成地形的網格的三角形相交。
  • Bounding Sphere:將您的角色視為一個球體,因為球體是否碰撞容易得多。 您只需通過“從球體中心到另一個網格的距離”來檢查“球體半徑”。 然后,如果該球體發生碰撞,則將其分解為更小的球體,可以更准確地表示您的角色。 您從那里遞歸進行3或4次迭代,或者按照表示角色的精度進行遞歸。 但是請記住,游戲中的所有內容都必須快快快,因此這就是限制遞歸的原因。

關於邊界球碰撞檢測的優秀文章

我編寫了一個示例OpenGL程序,該程序基本上使一個由邊界框表示的角色繞着需要碰撞檢測的地形行走。 如果您對它的工作方式更感興趣,請告訴我。

您可以通過以下幾種方法處理跌落傷害:

  1. 如果角色沒有飛行,則可以使用簡單的狀態機。 他們進入空中后,將狀態更改為“空中”,並在游戲外觀運行時設置一個計時器並跟蹤它們在空中停留多長時間。 如果它們在空中停留的時間太長,則根據它們的存在時間來計算不同程度的損壞。
  2. 一種更准確的方法是跟蹤角色的y速度。 這對現實生活是准確的。 如果您跌落緩慢,則跌倒損壞沒有任何意義。 如果您跌倒得很快,那么走得越快,受傷就會越嚴重。 因此想出了一種將下降速度與破壞聯系起來的方程。 然后,一旦他們撞到地面,將狀態機更改回“ ON_GROUND”並檢查fall_speed(可能是y_velocity)。

您可能還想嘗試Nvidia PhysX,除了它的名字所暗示的(您想對汽車物理學建模,這讓我想到了它),某些實用程序還提供了很多功能,例如碰撞檢測,四元數數學等

我將其與開放式圖形引擎Ogre(到目前為止;-)...配合使用,使得在OpenGL-DirectX和Linux-Microsoft之間的切換相對容易),該引擎也有很多功能。

由於您已經知道如何編寫代碼,因此我建議將以上內容視為可行的方法,而不是替代方法,而是開放源代碼; 這樣您就只需要重塑所需的車輪零件即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM