2015-10-13 49 views
3

我正在尋找很多,但只發現如何檢查2d對象的碰撞..對於我當前的項目我想檢查3D中的colisions(我使用OBJ模型) - 我可以大概找出自己的問題是,我只知道每個對象的中心點..與3D obj模型的Java碰撞檢測

有沒有辦法讓對象的邊界,以便我可以檢查它是否觸及另一個對象的邊界?什麼是獲得這些信息的最佳方式?

編輯:一些更多的信息,可以幫助:

我使用LWJGL 2.8,

我的對象是OBJ文件,

我能得到的位置,大小和對象的旋轉

編輯:這是我在YouTube上找到: https://www.youtube.com/watch?v=Iu6nAXFm2Wo&list=PLEETnX-uPtBXm1KEr_2zQ6K_0hoGH6JJ0&index=4

+0

你使用任何庫或框架,或者你只是想在Java中的原始代碼?答案很大程度上取決於你如何表示你的3D對象。 – Sebastian

+0

以及我正在使用lwjgl的OpenGL的東西.. obj文件只是構成網格的頂點座標..我真的不知道如果這是足夠的信息,如果有什麼你需要知道告訴我.. – DisasterCoder

+0

至少你有模型的頂點信息嗎?這樣,您就可以遍歷所有頂點並找到每個維度的最小值和最大值,並且可以生成一個邊界框,稍後用於檢測。 – Sebastian

回答

0

你有什麼是所謂的triangle soup [1]:你獲得了與三角形信息相交的頂點位置(紋理和法線)信息。你可以做的是將一個網格與另一個網格的每個三角形相交。你可以通過蠻力(每次測試所有其他三角形)或者建立一個space partitioning data structure來加速你的交點。

E.g.每個網格構建一個Octree並遍歷其中一個葉子:對於每個葉子,測試其邊界框對其他樹中的葉子和每個碰撞對的蠻力測試每個三角形內的每個三角形(或者只對網格B中的網格進行測試,如果你不關心自相交的話)。

例如,存在用於諸如OpenMeshBullet等這些算法的庫。但我只知道Java的一個端口:JBullet

編輯:如果你只對近似碰撞感興趣,你可以扔掉所有有關三角形的信息,並從你的頂點構建一個邊界體(例如,一個軸對齊的框只是所有頂點位置的最小值和最大值,一個定向盒子的構建方式相似,但必須首先找到一個足夠好的定位,一個球體是a bit more involved,最後是一個凸形網格,它使用與正常網格相同類型的相交測試,但比原始網格要小,凸,允許一般相交測試的一些優化)。

[1]:有other kinds of 3D representations記錄有關三角形如何連接的信息。你可以想象在網格A和網格B中只找到兩個相交的三角形,然後開始僅在初始交集的鄰域搜索相交的三角形......這些算法涉及更多,但對於變形有利的網格,不必每次都重建空間分區數據結構,因爲您必須處理三角形湯。

+0

謝謝,你可以指點我一些教程,或自己舉一個例子,因爲我肯定沒有想法如何編碼我自己.. ? – DisasterCoder

+0

@DisasterCoder嘗試JBullet,但也歡迎編程的困難部分:沒有硬算法的質量教程,這是3D計算機圖形簡而言之;) – BeyelerStudios

+0

哦謝謝..以及我找到了一個教程,將幫助我做我所做的想要 - 這樣不難,你只需要知道在哪裏看;)感謝您的幫助! – DisasterCoder