設(shè)置
  • 日夜間
    隨系統(tǒng)
    淺色
    深色
  • 主題色

通過(guò)“預(yù)測(cè)”世界杯了解物理引擎

2022/11/24 18:29:04 來(lái)源:中科院物理所 作者:Callo 責(zé)編:遠(yuǎn)生

原文標(biāo)題:《給我一個(gè)物理引擎,我也能“預(yù)測(cè)”世界杯?》

世界杯正如火如荼地進(jìn)行,而大力神杯終究會(huì)花落誰(shuí)家,成為了每屆世界杯都被人們津津樂(lè)道的話題。許多專業(yè)機(jī)構(gòu)也不甘落后,紛紛用自己的專業(yè)模型和數(shù)據(jù)進(jìn)行分析,給出了每支球隊(duì)奪冠的賠率。但你有沒(méi)有想過(guò),不要 998,只要一個(gè)物理引擎,你也可以在家“預(yù)測(cè)”世界杯?

大力神杯 | 圖源 FIFA World Cup Trophy - Wallpapers Den

此預(yù)測(cè)非彼預(yù)測(cè)

看到這個(gè)小標(biāo)題,想必同學(xué)們應(yīng)該也猜到了,小編接下來(lái)為大家介紹的既不是像章魚(yú)保羅這樣的“神獸”式預(yù)測(cè),也不是專業(yè)預(yù)測(cè)機(jī)構(gòu)那樣神秘的數(shù)據(jù)分析。接下來(lái),小編將帶領(lǐng)同學(xué)們走入的是元宇宙紀(jì)元下交互版的世界杯預(yù)測(cè)世界??(其實(shí)就是帶大家一起玩實(shí)況啦~)

章魚(yú)保羅 | 圖源 www.wbur.org

不知道還有多少同學(xué)知道這樣一句話呢:“歡迎來(lái)到實(shí)況足球 8,國(guó)際版的游戲世界”??實(shí)況 8,相信是整整一代人的足球游戲入坑作,想當(dāng)年小編也曾在其中打造自己的“夢(mèng)之隊(duì)”,去馳騁世界賽場(chǎng),斬獲一座座獎(jiǎng)杯。

歡迎來(lái)到實(shí)況足球 8 國(guó)際版的游戲世界 | 圖源 實(shí)況足球 8 國(guó)際中文解說(shuō)版

小編再來(lái)考一考,有多少同學(xué)知道拉普拉斯妖呢?這是一只準(zhǔn)確知道宇宙中所有原子的位置和動(dòng)量,并能熟練使用牛頓定律的小妖,其可以通過(guò)力學(xué)定律精確地推演歷史,并預(yù)測(cè)未來(lái)。

Démon de Laplace | 圖源 www.etsy.com

讀到這里,相信同學(xué)們已經(jīng)能夠猜地八九不離十了:假如有這樣一個(gè)足球游戲,其能夠真實(shí)地還原每場(chǎng)比賽中的所有物理組成,包括場(chǎng)地、足球以及雙方球員的身體狀況、心態(tài)決策等等,那么我們就成為了這場(chǎng)比賽的“拉普拉斯妖”,并可以通過(guò)模擬這場(chǎng)比賽來(lái)對(duì)真實(shí)的比賽結(jié)果給出準(zhǔn)確的預(yù)測(cè)。

腦洞開(kāi)的再大一點(diǎn),我們甚至可以為比賽雙方都設(shè)置一個(gè)可以“進(jìn)化”的 AI,并讓他們之間不斷對(duì)戰(zhàn),通過(guò)電腦自己的“左右互搏”而自我進(jìn)化,從而篩選出一套最強(qiáng)的足球戰(zhàn)術(shù),從而反過(guò)來(lái)在現(xiàn)實(shí)中幫助球隊(duì)所向披靡。

左右互搏 | 圖源 手機(jī)搜狐網(wǎng) (sohu.com)

且不論上述黑魔法是否真的能實(shí)現(xiàn),但不可否認(rèn)的是,現(xiàn)在的足球游戲真的是做的很逼真,不論是各種詭異的足球彈道到人物的表情服飾,都在游戲光影的渲染下與現(xiàn)實(shí)無(wú)異。然而,不知道同學(xué)們有沒(méi)有想過(guò),電腦中的游戲?yàn)槭裁茨苋绱髓蜩蛉缟卦佻F(xiàn)足球比賽,并且讓玩家可以感受到球員真實(shí)的技術(shù)動(dòng)作以及反應(yīng)呢?下面,就讓小編帶領(lǐng)大家走進(jìn)作為足球游戲支撐的,背后的物理引擎世界吧~??

實(shí)況、FIFA,然后物理引擎

當(dāng)年小編玩的實(shí)況八,大致是這樣一種觀感:

實(shí)況八中的齊祖 | 圖源 malavida.com

可見(jiàn),其人物造型仍有點(diǎn)“生疏”,而背后的草地也更像是一塊簡(jiǎn)單的劣質(zhì)貼圖??。再來(lái)看看近幾年(以 FIFA22 為例)的游戲場(chǎng)景:

FIFA 22 | 圖源 EA SPORTS

是不是既真實(shí)又炫酷呢?現(xiàn)在游戲之所以能夠帶來(lái)如此真實(shí)的體驗(yàn),離不開(kāi)其背后的游戲引擎的支撐。

FIFA22 中使用的游戲引擎是大名鼎鼎的寒霜引擎

寒霜引擎 | 圖源 USgamer

而寒霜引擎中,作為其最基本物理部分引擎的,是 Havok 物理引擎 [1]:

Havok 引擎 | 圖源  Attack of the Fanboy

其支持許多對(duì)于現(xiàn)實(shí)生活中物理現(xiàn)象的模擬,并通過(guò)不斷的技術(shù)迭代,使得人物的動(dòng)作更加真實(shí)。

Havok 引擎演示 | 圖源 【游戲研究室】嗶哩嗶哩

而其更是被應(yīng)用到了很多的 3A 大作中,例如:

一些應(yīng)用了 Havok 引擎的游戲,你能認(rèn)出幾個(gè)?| 圖源 Havok

游戲引擎,顧名思義,猶如一款游戲的發(fā)動(dòng)機(jī),是一個(gè)游戲的核心部件。游戲中例如足球的滾動(dòng)、球員們的對(duì)抗與碰撞,都是基于其主管物理的部分:物理引擎而實(shí)現(xiàn)的。而在物理引擎的底層,其也蘊(yùn)含著十足的硬核物理原理。同學(xué)們不妨跟著小編一起看下去,去踢一場(chǎng)“最硬核”的世界杯吧!??

物理引擎:剛體動(dòng)力學(xué)、碰撞檢測(cè)與約束

一個(gè)成熟的物理引擎,其核心主要包括以下三大部分 [2]:

1.剛體動(dòng)力學(xué)部分

2.碰撞檢測(cè)部分

3.約束部分

通過(guò)以上三個(gè)流程,物理引擎可以用如下圖所示的一個(gè)循環(huán)來(lái)迭代計(jì)算每個(gè)物體的位置和速度信息,當(dāng)?shù)俣茸銐蚩烨业Y(jié)果足夠精確時(shí),顯示到屏幕上的物體運(yùn)動(dòng)就可以稱得上“栩栩如生”了。

物理引擎中的核心循環(huán),通過(guò)一系列符合物理法則的迭代計(jì)算更新物體的信息,從而使得游戲世界栩栩如生

下面,讓小編逐一為大家進(jìn)行介紹。

剛體動(dòng)力學(xué)

首先,要讓計(jì)算機(jī)知道在游戲場(chǎng)景中,哪個(gè)地方存在一個(gè)什么樣的物體,它是如何運(yùn)動(dòng)的,我們需要找到一種合適的方式來(lái)對(duì)于物體的形狀、位置、速度等進(jìn)行描述。在建模過(guò)程中,一個(gè)復(fù)雜的物體經(jīng)??梢砸暈樵S許多多相對(duì)簡(jiǎn)單的剛體的組合,作為 building blocks, 我們首先考察剛體動(dòng)力學(xué)。

一個(gè)典型剛體 | 圖源 [3]

剛體 (rigid body),被定義為形變?yōu)?0 的物體,其上任意兩點(diǎn)之間的距離,無(wú)論剛體如何運(yùn)動(dòng),都是不變的 [3]。在中學(xué)物理中,相信同學(xué)們都學(xué)習(xí)過(guò)質(zhì)點(diǎn)的運(yùn)動(dòng)學(xué),其由牛頓三定律描述 [4]:

牛頓三定律

從質(zhì)點(diǎn)運(yùn)動(dòng)學(xué)給我們的啟發(fā),在研究剛體運(yùn)動(dòng)學(xué)時(shí),我們也嘗試借鑒描述質(zhì)點(diǎn)時(shí)的成功經(jīng)驗(yàn),并在其上進(jìn)行進(jìn)一步擴(kuò)充,以便正確描述一個(gè)有形狀有體積的剛體。鑒于剛體有著以一個(gè)整體運(yùn)動(dòng)的特征,我們可以首先定義其質(zhì)心

質(zhì)心

其中,求和對(duì)應(yīng)于剛體質(zhì)量離散分布,而積分對(duì)應(yīng)連續(xù)質(zhì)量分布的剛體。

顧名思義,質(zhì)心就是剛體質(zhì)量的中心,凡是與剛體平動(dòng)有關(guān)的動(dòng)力學(xué)性質(zhì),都可以用質(zhì)心來(lái)代替。而質(zhì)心也有很多有趣的性質(zhì),例如下圖,如果一只玩具鳥(niǎo)的質(zhì)心正好被設(shè)計(jì)在嘴部,則人可以用一只手指將其托起而不至翻倒。

利用質(zhì)心特性制作的小玩具 | 圖源 [5]

但與此同時(shí),由于剛體可以視為一系列質(zhì)點(diǎn)的集合,其在空間存在一定的分布,所以如果僅僅使用質(zhì)心來(lái)描述其動(dòng)力學(xué)特性是不夠的,我們還要研究剛體的轉(zhuǎn)動(dòng)。

為了研究剛體的轉(zhuǎn)動(dòng),首先明確以下約定和記號(hào) [6]:如下圖,假設(shè) XYZ 是我們進(jìn)行觀察的實(shí)驗(yàn)室坐標(biāo)系(固定坐標(biāo)系),而 x1x2x3 為固定在剛體上并隨之一起平動(dòng)、轉(zhuǎn)動(dòng)的坐標(biāo)系(稱之為動(dòng)坐標(biāo)系),圖中一些約定如下:

約定與記號(hào)

則剛體的任何一個(gè)無(wú)窮小位移:

可以表示為一個(gè)隨著其質(zhì)心的無(wú)窮小平動(dòng)

以及一個(gè)繞著動(dòng)坐標(biāo)系原點(diǎn)的無(wú)窮小轉(zhuǎn)動(dòng)

之和:

剛體無(wú)窮小位移

這樣,剛體上任意一點(diǎn)的位置就可以被我們方便地描述了。下面,對(duì)上式逐項(xiàng)進(jìn)行求導(dǎo),來(lái)考察剛體上各點(diǎn)的速度:

其分別為剛體上某一點(diǎn)對(duì)于固定坐標(biāo)系的速度,剛體質(zhì)心的平動(dòng)速度以及剛體的轉(zhuǎn)動(dòng)角速度。由此可見(jiàn),剛體上任意一點(diǎn)的速度可以用剛體平動(dòng)速度和轉(zhuǎn)動(dòng)角速度來(lái)分解

下面研究剛體的受力與運(yùn)動(dòng)方程:首先,處理平動(dòng)部分,并假設(shè)剛體的總質(zhì)量為

則有

進(jìn)一步,則有剛體平動(dòng)的運(yùn)動(dòng)方程:

剛體平動(dòng)的運(yùn)動(dòng)方程

這與質(zhì)點(diǎn)的運(yùn)動(dòng)方程是一致的,而這個(gè)結(jié)果也再次驗(yàn)證了上文所說(shuō)的,通過(guò)使用質(zhì)心來(lái)描述剛體平動(dòng)的合理性。

為了描述轉(zhuǎn)動(dòng)的運(yùn)動(dòng)方程,首先定義剛體的轉(zhuǎn)動(dòng)慣量張量

轉(zhuǎn)動(dòng)慣量張量

上式對(duì)應(yīng)于離散情況,對(duì)連續(xù)質(zhì)量分布情況,只需要將各個(gè)分量用如下積分代替:

進(jìn)而,可以定義剛體的內(nèi)稟角動(dòng)量

不妨選擇慣性參考系使得剛體質(zhì)心速度在該參考系中為 0(這一點(diǎn)總可以做到),并定義剛體的總力矩

則有剛體轉(zhuǎn)動(dòng)部分的運(yùn)動(dòng)方程

剛體轉(zhuǎn)動(dòng)的運(yùn)動(dòng)方程

碰撞檢測(cè)

現(xiàn)在我們已經(jīng)知道如何描述一個(gè)剛體的位置以及運(yùn)動(dòng)了,但游戲場(chǎng)景中通常存在許許多多的物體,根據(jù)平時(shí)物理世界的直覺(jué),如果兩個(gè)物體相向而行,則其必定會(huì)在某個(gè)時(shí)刻相撞而彈開(kāi)。在物理引擎中,專門(mén)有碰撞檢測(cè)的算法來(lái)處理這一問(wèn)題。

一般,對(duì)于物體的碰撞檢測(cè)分為兩個(gè)階段進(jìn)行,第一部分是較為粗糙的 Broad-Phase 部分,而第二部分是較為細(xì)致的 Narrow-Phase 部分。首先,看 Broad-Phase 檢測(cè) [7]:

Broad-Phase 檢測(cè)中,就是先粗略地估計(jì)兩個(gè)物體有沒(méi)有可能相撞,來(lái)為之后的 Narrow-Phase 檢測(cè)減少工作量。首先,定義物體的 Bounding Volume[8]: 能完全包住該物體的最小長(zhǎng)方體的體積。

最常用的 Bounding Volume 方法有 AABB(axis-aligned bounding boxes), OBB(oriented bounding boxes), 和 Bounding Circle/Sphere,其示意分別如下圖所示:

三種常用的 Bounding

其中最常用,也是最節(jié)省計(jì)算資源的是第一種,為 AABB,在這一種 Bounding 方式下,判斷兩個(gè)物體是否可能發(fā)生碰撞,只需要檢測(cè)包圍住這兩個(gè)物體的長(zhǎng)方體有沒(méi)有可能發(fā)生碰撞,從而將不規(guī)則物體碰撞的預(yù)檢測(cè)化為了規(guī)則的長(zhǎng)方體之間重合的檢測(cè)。

在檢測(cè)是否有碰撞發(fā)生時(shí),通常采用 Sweep and Prune 方法 [9],其大意如下:在 AABB 方法下,在每個(gè)坐標(biāo)軸上將每個(gè)物體所占有的長(zhǎng)度的兩端標(biāo)記為 (b,e),如下圖,以 x 軸為例:

Sweep and Prune 方法

分別在坐標(biāo)軸上標(biāo)記了三個(gè)物體在 AABB 方法下的邊界,并產(chǎn)生了三個(gè) (b,e) 對(duì):

如此,對(duì)于任意兩個(gè)物體 i 和 j,如果判定下列不等式之一成立

即判定這兩個(gè)物體有可能(即將或者已經(jīng)在)發(fā)生碰撞。

例如上面橫著的葡萄和足球,就滿足

這個(gè)不等式,而從圖中也可以看出,在 x 軸上,這兩個(gè)物體的投影也確實(shí)是有重合的。

在進(jìn)行完 Broad-Phase 檢測(cè)后,我們就挑選出了所有可能存在碰撞情況的物體對(duì),并只需要對(duì)于這些物體對(duì)進(jìn)行更為細(xì)致的 Narrow-Phase 檢測(cè),其簡(jiǎn)介如下:

首先,考察一個(gè)物體的凹凸性,由于凸多面體有著更為方便的碰撞檢測(cè)特點(diǎn),所以我們期望更多地使用凸多面體去近似實(shí)際的物理物體。

凸多面體可以被定義為,一個(gè)幾何體內(nèi)任意兩點(diǎn)所連線段都落在該幾何體內(nèi)的多面體。而凹多面體則反之,存在一條幾何體兩點(diǎn)連線,其不能完全包含在該幾何體內(nèi)。

凸多面體與凹多面體

可見(jiàn),凸多面體存在著相較于凹多面體規(guī)則地多的形狀,這也是為什么凸多面體在實(shí)際計(jì)算中更好判斷是否發(fā)生碰撞的部分原因。但幸運(yùn)的是,通過(guò) Quickhull 算法 [10],我們可以方便地生成任意一個(gè)凹多面體的凸多面體逼近:

Quickhull 算法示意 | 圖源 [10]

現(xiàn)在我們面對(duì)的問(wèn)題就簡(jiǎn)化成了如何細(xì)致判斷兩個(gè)凸多面體是否發(fā)生碰撞。一種直觀的想法是逐點(diǎn)判斷兩個(gè)物體的輪廓,是否有存在一個(gè)多邊形的某個(gè)點(diǎn)被另一個(gè)多邊形的所有邊界點(diǎn)所包圍。但在實(shí)際物理引擎中,通常使用更為優(yōu)化的計(jì)算方法,以平衡計(jì)算開(kāi)支。其中一種較為方便的方法稱為 Separating Axis Theorem(SAT),其基本原理是 [11]:對(duì)于兩個(gè)凸多面體,其不相交的條件是存在一條直線,使得兩者在該直線上的投影不相交。

SAT 算法示意

例如,上圖六邊形與梯形,存在一條投影軸 (Axis) 使得兩者在其上的投影不相交,則判定這兩個(gè)物體沒(méi)有發(fā)生碰撞,這也與直接的直觀認(rèn)知是一致的。

現(xiàn)在我們知道了如何判定兩個(gè)物體有沒(méi)有碰撞,那么,假如兩個(gè)物體發(fā)生了碰撞,其碰撞之后的情況又是什么樣的呢?下面以質(zhì)點(diǎn)碰撞為例,說(shuō)明物理引擎對(duì)于碰撞的處理。

碰撞可以分為彈性碰撞非彈性碰撞(包含完全非彈性碰撞和部分彈性碰撞),首先,看彈性碰撞,對(duì)于兩個(gè)理想球體發(fā)生彈性碰撞,其過(guò)程中動(dòng)量和能量都守恒,設(shè)其質(zhì)量分別為 m1 和 m2,初始速度分別為 u1 和 u2,碰撞后速度為 v1 和 v2,則有 [12]:

對(duì)于非彈性碰撞,定義恢復(fù)系數(shù)

恢復(fù)系數(shù)

則有碰撞后速度:

可以看出,恢復(fù)系數(shù)為 0 對(duì)應(yīng)完全非彈性碰撞,而其為 1 對(duì)應(yīng)為完全彈性碰撞。恢復(fù)系數(shù)通常與兩個(gè)碰撞物體的材質(zhì)以及物理特性有關(guān),是一個(gè)經(jīng)驗(yàn)的參數(shù),需要對(duì)兩兩物體間分別設(shè)定。

看到這里,兩個(gè)物體在物理引擎中是如何判定是否發(fā)生碰撞的,以及如果其發(fā)生了碰撞后如何繼續(xù)演化就被我們以至少一種可行的方式弄清楚了。但僅僅知道上述內(nèi)容還不足以完成一個(gè)完整的物理引擎,這是因?yàn)樵趯?shí)際的物理世界中,處處都存在著約束條件 [15],例如一個(gè)小物塊從斜坡上滑下,其在運(yùn)動(dòng)過(guò)程中必須保持自身處于斜面之上,而不能突然穿入斜面或者飛到天上去。

斜面上的小物塊、受力分析和約束 | 圖源 [15]

下面就讓我們一起來(lái)看看,物理引擎中所用到的約束吧。

約束

從上文的討論可知,約束通常意味著真實(shí)的物理情形對(duì)于物體位置和速度的限制,使之不會(huì)出現(xiàn)反常、反直覺(jué)的現(xiàn)象(例如游戲中偶爾出現(xiàn)的穿模 bug,就是約束沒(méi)算好??)

一個(gè)約束計(jì)算失敗案例 | 圖源 baidu.com

那么,在物理引擎中,約束是如何進(jìn)行計(jì)算的呢?下面用一個(gè)簡(jiǎn)單的例子進(jìn)行說(shuō)明:

例如,對(duì)于一個(gè)在碗里的小球,我們把小球從碗的邊緣釋放,使之在碗中自由運(yùn)動(dòng)。

快到碗里來(lái)??

把碗的內(nèi)壁簡(jiǎn)化為一個(gè)半球面,并不妨設(shè)其半徑為 R,并把小球簡(jiǎn)化成質(zhì)點(diǎn)的話,則不難得到如下的約束:

其含義是小球到上圖坐標(biāo)系原點(diǎn) O 的距離始終是碗的半徑,也就對(duì)應(yīng)著小球被約束在碗壁上這一物理實(shí)在。

下面,將上述約束寫(xiě)為更形式化的形式:

其中,C (r) 被稱為約束方程,其等價(jià)于上面的約束條件。將該約束方程與最開(kāi)始部分的運(yùn)動(dòng)學(xué)方程聯(lián)立,即得到了對(duì)于物體的準(zhǔn)確描述。而在物理引擎求解約束這一部分,則相應(yīng)的需要對(duì)在計(jì)算過(guò)程中出現(xiàn)的違反約束的位形進(jìn)行修正,通常采用人為引入一個(gè)約束力的方式進(jìn)行,以保證最后不出現(xiàn)不合常理的游戲情形。(媽媽再也不用擔(dān)心我的穿模啦??)

最后...

相信通過(guò)上文的學(xué)習(xí),同學(xué)們一定已經(jīng)對(duì)物理引擎有了一個(gè)較為基礎(chǔ)的了解了??,不過(guò)當(dāng)然,就像鳥(niǎo)兒飛翔不需要懂空氣動(dòng)力學(xué)一樣,同學(xué)們不必知道游戲引擎的每一個(gè)原理也可以暢玩游戲,但作為當(dāng)今世界傳播最廣的娛樂(lè)方式之一,游戲,其核心:游戲引擎,尤其是物理引擎,卻大量應(yīng)用了最基本的物理原理。正是由于物理定律對(duì)于真實(shí)世界的精確描述,人們才得以在計(jì)算機(jī)構(gòu)建的世界中搭建一個(gè)栩栩如生的舞臺(tái),在其上有列國(guó)紛爭(zhēng)、異世冒險(xiǎn)、激情賽道、鷹擊長(zhǎng)空、實(shí)況足球等等等等,但小編也希望同學(xué)們?cè)诳赐赀@篇科普后,也能在以后再次打開(kāi)實(shí)況八的時(shí)候,或多或少地想到,作為游戲核心支撐的物理定律,其強(qiáng)大的威力以及其無(wú)盡的魅力。而至于開(kāi)頭說(shuō)的拉普拉斯妖式預(yù)測(cè)可能還有很長(zhǎng)的路要走,但左右互搏術(shù)的思想已經(jīng)被用于多種情景中,例如大名鼎鼎的 Alpha Go Zero。

最后,希望同學(xué)們既能夠享受游戲,也能夠享受本屆世界杯的無(wú)窮魅力,就像 1998 年法國(guó)世界杯主題曲所唱一樣,"Here we go, 啊嘞啊嘞啊嘞,GOGOGO,啊嘞啊嘞啊嘞 "??

參考資料: 

  • 向上滑動(dòng)閱覽

  • [1]: 寒霜引擎_百度百科 (baidu.com)

  • [2]: Video Game Physics Tutorial  | Toptal

  • [3]: Rigid body - Wikipedia

  • [4]: 牛頓運(yùn)動(dòng)定律(物理定律)_百度百科 (baidu.com)

  • [5]: Center of mass - Wikipedia

  • [6]: 朗道理論物理教程 (卷 01),《力學(xué)》(第 5 版),[俄] 朗道、栗弗席茲,李俊峰、鞠國(guó)興 (譯),高等教育出版社,2007

  • [7]:Chapter 32. Broad-Phase Collision Detection with CUDA | NVIDIA Developer

  • [8]: Bounding volume - Wikipedia

  • [9]: Sweep and prune - Wikipedia

  • [10]: Quickhull - Wikipedia

  • [11]: Hyperplane separation theorem - Wikipedia

  • [12]:Elastic collision - Wikipedia

  • [13]: Coefficient of restitution - Wikipedia

  • [14]: Inelastic collision - Wikipedia

  • [15]: Constraint (classical mechanics) - Wikipedia

本文來(lái)自微信公眾號(hào):中科院物理所 (ID:cas-iop),作者:Callo

廣告聲明:文內(nèi)含有的對(duì)外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時(shí)間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。

相關(guān)文章

關(guān)鍵詞:物理引擎游戲,物理

軟媒旗下網(wǎng)站: IT之家 最會(huì)買 - 返利返現(xiàn)優(yōu)惠券 iPhone之家 Win7之家 Win10之家 Win11之家

軟媒旗下軟件: 軟媒手機(jī)APP應(yīng)用 魔方 最會(huì)買 要知