2012-03-07 78 views
0

這是一個普遍性問題,它回答了一個我感興趣的常識而不是回答特定問題的問題。什麼是創建物理引擎的可能方法

我想知道什麼是可用的方法來實現物體引擎的對象與外部力量互動。作爲一個例子,我們可以看看憤怒的小鳥,或者像TIM這樣的遊戲。哪裏有物體在空中「飛行」,相互碰撞和相互作用,受環境如重力,風力和其他「力量」的影響。

我曾經想過的模型是每個對象都有一個對象(作爲某個類的對象)和一個與之相關的線程。每一個時間段,線程都會「獲得」空間中的某個小dt。在這種情況下,你可以擁有一個「環境」對象,它可以在空間中佔據一席之地,併爲你提供環境潛力所應用的等效力量。我不能確切得到的是對象如何相互作用?

另外,我接近我的方向?這些問題還有其他解決方案和模型嗎?它們更好嗎?我錯過了什麼(我必須錯過一些東西)?

+0

描述運動的方程式屬於機械物理學,一旦你理解了矢量數學,它就非常簡單 - 你所描述的或多或少是遊戲引擎的工作原理。至於「物體如何相互作用」,這聽起來像是在詢問[碰撞檢測](http://en.wikipedia.org/wiki/Collision_detection)。我正在投票結束,因爲這個問題與「網站是如何製作的?」一樣廣泛。 - 如果沒有寫一本書,或者將其推廣到如此極端以至於答案缺乏有用的內容,真的無法回答。 – 2012-03-07 18:31:00

+0

我想要的是一般化的答案,我說我沒有實際使用這個問題。雖然我確實瞭解物理如何工作,以及如何檢測兩個物體之間的碰撞。我對在所有機構上運行碰撞檢測程序的機制感興趣,並且有哪些可能的方法來管理它並儘量減少操作次數。我想這個問題的主要觀點是在大型號碼環境中優化碰撞檢查程序的方法。 – SIMEL 2012-03-07 19:13:41

+1

http://en.wikipedia.org/wiki/Collision_detection#Optimization – 2012-03-07 19:14:53

回答

2

執行通常與您所描述的完全不同,這太貴了。相反,一切都被簡化爲矩陣變換。點是由矩陣操作的座標列表,它們將它們更新到下一個時間間隔。矩陣本身是從物理學中計算出來的(它們是或多或少的力量的線性解)。

當你在尺度上有很大的差異時(比如模擬星系中的恆星),情況會變得更加複雜。那麼您可以使用更分層次的方法,以便與非關鍵點相比,關鍵點(例如快速移動或更精確的加速點)更新更頻繁。但即使如此,內存中的表示也非常抽象,沒有像「每件事物一個對象」那樣直接。