2014-02-23 37 views
1

我很抱歉問這樣一個關於子彈的基本問題。但是,我有一個問題。這是設置:在子彈中使用「質量」

我有一個沒有重力的世界。當我按下一個鍵時,在世界中心創建一個1x1x1盒子。當我用鼠標右鍵單擊時,相機位置會創建一個大小爲0.05 * 0.05 * 0.05的框,並在您正在查看的方向上「拍攝」。這是麻煩開始的地方。

當一個小立方體碰到一個大立方體時,交互似乎是錯誤的。你會顯示一個1/8000的大小的盒子,其效果非常小。然而,大立方體飛行,就好像它是一個相同大小的立方體一樣。我認爲這是因爲我創建了相同質量的兩個對象。

爲了證實這一點,我使用1牛頓(或任何單位子彈使用)的向上力量。兩個對象都以相同的速度加速。

我創建對象的代碼如下:

btMotionState *state = new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), btVector3(0, 0, 0))); 
btConvexHullShape* shape = new btConvexHullShape(); 
for(unsigned int i = 0; i < vertices.size(); ++i) { 
    shape->addPoint(toBt(vertices[i])); 
} 
shape->setMargin(0.01f); 

btScalar mass = 1.f; 
btVector3 inertia; 
shape->calculateLocalInertia(mass, inertia); 
shape->setMargin(0.01f); 
btRigidBody::btRigidBodyConstructionInfo ci(mass, state, shape, inertia); 
body = new btRigidBody(ci); 

我期望btScalar mass = 1.f;行是罪魁禍首。

我是否期望計算我的物體的質量?這對於一個立方體來說足夠簡單,但是一些奇怪的凸起形狀呢?有什麼方法可以讓子彈爲我做這個嗎?

回答

2

是的,質量是罪魁禍首。想想你的大盒子是一個空的木箱,你的小盒子是一個堅實的鐵塊。大小差別很大,但質量相同。現在你的物理看起來是正確的吧?

是的,你需要提供質量。無論你計算它還是隻說「這個箱子重20公斤」取決於你。實際上,期待別人爲你計算質量只會讓你的問題變得更糟,因爲除了它的幾何外,你還必須指定物體的材質,材質密度和材質分佈。如果你想這樣做,有很多其他工具可以幫助你進行這樣的計算。但我相信你同意,通過試驗和錯誤陳述一些質量是比較容易的。

+0

那麼這樣你就必須自己計算質量中心,不是嗎?所以(對於非平凡的形狀),你需要知道形狀和密度,而不是你,反覆試驗還不夠? – Rup

+0

謝謝你的回答。我想我必須投入一些時間來計算凸包體積,或者切換到'triangleMesh'類型的對象。我的數據是以這種方式建立的,所以我確實認爲這將是一條路。 – BWG

+0

@BWG知道物體的重量遠比其體積和密度更爲常見。你在建模什麼? – weston