2014-07-18 90 views
1

我使用攪拌器來創建我的模型,並將它們加載到Libgdx中,如果我在下面的模型中心使用Origin創建它們,然後使用此代碼創建剛體,所有作品細Libgdx子彈偏移原點

 Vector3 hescoWallHalfExtents = new Vector3(hescoWall.calculateBoundingBox(bounds).getDimensions()).scl(0.5f); 

enter image description here

但是如果我把模型級別的底部與地面像這樣

enter image description here

那麼btRigidbody是這樣

enter image description here

偏移量是有,我可以抵消剛體的高度,一個明顯的方法是什麼?

非常感謝。

Spriggsy

回答

4

的剛性主體的中心(原點)是相同的質量中心和爲此的重要性質爲所述物理仿真。如果你願意,你可以使用btCompoundShape「移動」這個中心,但這也會影響物理模擬,因此可能不會給你滿意的結果。

或者,您可以補償btMotionState中物理原點和視覺原點的差異。例如,通過將ModelInstance#transform設置爲提供的worldTransform乘以包含偏移的a Matrix4實例(例如,使用Matrix4#translate)。

但是,這可能只是使它比需要更復雜。你可以說真正的問題是爲什麼你想要抵消模型的中心與身體相比?例如,在第二張圖像中,模型的中心看起來與第一張圖像中的相同。您僅移動了Node,基本上表明您想爲ModelInstance#transform成員提供初始值。您可以通過實例化ModelInstance如下做到這一點:

modelInstance = new ModelInstance(model, "coneNode", true); 

更換"coneNode"用在你的建模應用程序創建它的節點的名稱。最後一個(true)參數告訴ModelInstance將其transform成員設置爲您在建模應用程序中給出的轉換。如果需要,您可以撥打modelInstance.transform.translate(x, y, z);modelInstance.transform.trn(x, y, z);將modelInstance 相對移至此轉換。

這方面更深入的解釋可以在這裏找到:http://blog.xoppa.com/loading-a-scene-with-libgdx/

請注意,這僅適用,如果你正在使用從支持節點轉換的文件格式創建.g3db.g3dj文件(例如,使用fbx-conv) (如.fbx,但.obj

+0

我一直在讀你2天的教程現在,搜索整個網絡找出了問題,直到我發現這一點。哇,這爲我解決了一切。 Tnx很多! –