2013-08-17 116 views
0

我正在爲C++編寫一個用於託管遊戲服務器的專用服務器軟件的插件。使用MatGeoLib進行3D碰撞檢測?

我四處尋找3D碰撞庫,但真的很難找到任何示例,但我決定使用MathGeoLib,因爲它看起來很有前途 - 但它缺少示例,我無法找到任何示例。

所以我的問題是:我將如何定義一個球體和一個立方體,一條線(點+方向),然後獲取線遇到的第一個碰撞的位置XYZ?

該文檔僅顯示類和它們具有的方法。但沒有顯示如何開始使用MathGeoLib。有沒有在谷歌上找不到的教程?在我的項目


背景資料:

我正在爲聖安德列斯多人衝突檢測器,服務器有沒有信息whatsover的遊戲世界,所以我決定提取碰撞文件和對象放置文件並將它們轉換爲適用於我的插件的可用格式。

對象有位置XYZ和四元數旋轉XYZW和碰撞文件,以及have lots of stuff in them [項目成員正在爲項目的這些.col文件編寫解析器]。

該項目的目標是提供一種機制來確定基於XY位置的Z位置並提供一個光線跟蹤器,它可以告訴您遊戲世界中一條線(StartPos,EndPos)與XYZ相交的位置(擊中XYZ)。

這就是爲什麼我需要知道如何用MathGeoLib完成此操作。我將把所有的對象碰撞加載到一個世界中,然後執行光線跟蹤器功能。 (對象的數量大約30,000的6000x6000x1000區)

+1

Gizmo,你試過子彈嗎? – lpapp

+0

不,在「C++ 3D碰撞庫」下找不到它,它是一款遊戲物理引擎..? – Gizmo

+0

是我所暴露/使用的碰撞檢測事物嗎? – Gizmo

回答

1

退房

http://bulletphysics.org/wordpress/

子彈是一個開源的物理引擎,並配備了大量的示例代碼。特別是您想要使用動態世界的rayTest()方法來投射光線並返回最近的碰撞點。總結一下,你需要;創建一個動態世界,將您的球體和立方體數據加載到其中,然後致電rayTest(startPoint, endPoint, resultCallback);

假設您在開始使用「hello world」示例代碼之前沒有使用過子彈來查看如何輕鬆創建動態世界並添加剛體。

+0

我想知道作者是否可以按照我的建議切換到Bullet,或者他確實在使用matgeolib尋找解決方案。儘管我自己從來沒有使用過這個庫。 :) – lpapp

+0

我不介意只要我能得到碰撞點:)這就是我的插件是關於,我今天開始,所以切換並不難。我會檢查子彈,你好世界的例子是可以理解的..但教程頁面是[空](http://bulletphysics.org/mediawiki-1.5.8/index.php/Bullet_Tutorials)... – Gizmo

+0

nvm我看到頁面[移到這裏](http://bulletphysics.org/mediawiki-1.5.8/index.php/Tutorial_Articles)。去試試吧 – Gizmo