2

Я новичок в пуле, и у меня есть, вероятно, основная проблема. Я пытаюсь имитировать падение лука, но они после падения, вставая сами, без какой-либо силы.Массовый центр физики пули и странная реакция объекта

Интересно, где моя ошибка, может ли кто-нибудь из вас помочь, я был бы благодарен.

здесь видео, показывающее, что происходит: https://www.sendspace.com/file/78tncr

и вот как я добавил слово:

tTransform l; 
l.setIdentity(); 
l.setOrigin(btVector3(0,0,0)); 
btStaticPlaneShape* plane=new btStaticPlaneShape(btVector3(0,1,0),0); 
btMotionState* motion=new btDefaultMotionState(l); 
btRigidBody::btRigidBodyConstructionInfo info(0.0,motion,plane); 
btRigidBody* body=new btRigidBody(info); 
world->addRigidBody(body); 
bodies.push_back(body); 

и это, как я добавил bolwing шпильку:

btRigidbodyaddBolw (float x, float y , float z,float mass) 
{ 
btTransform t; 
t.setIdentity(); 
t.setOrigin(btVector3(x,y,z)); 
btTriangleMesh * tmptri= new btTriangleMesh(); 
//this is simply reading from std::vector, where I have vertex of a shape 
for(int i=0;i<=faces.size()-3;i=i+3) 
{ 
    if(faces[i].wektor==-100) 
    { 
     i=i-2; 
     continue; 
    } 
    btVector3 vertex1(vertexy[faces[i].wektor].GetX(), vertexy[faces[i].wektor].GetY(), vertexy[faces[i].wektor].GetZ()); 
    btVector3 vertex2(vertexy[faces[i+1].wektor].GetX(), vertexy[faces[i+1].wektor].GetY(), vertexy[faces[i+1].wektor].GetZ()); 
    btVector3 vertex3(vertexy[faces[i+2].wektor].GetX(), vertexy[faces[i+2].wektor].GetY(), vertexy[faces[i+2].wektor].GetZ()); 

    tmptri->addTriangle(vertex1, vertex2, vertex3); 
} 
btConvexShape *tmpshape = new btConvexTriangleMeshShape(tmptri); 
btShapeHull *hull = new btShapeHull(tmpshape); 
btScalar margin = tmpshape->getMargin(); 
hull->buildHull(margin); 
btConvexHullShape* simplifiedConvexShape = new btConvexHullShape(); 
for (int i=0;i<hull->numVertices();i++) 
{ 
    simplifiedConvexShape->addPoint(hull->getVertexPointer()[i]); 
} 
delete tmpshape; 
delete hull; 
btMotionState * motion = new btDefaultMotionState(t); 
btVector3 inertia(0,0,0); 
if(mass!=0.0) 
    simplifiedConvexShape->calculateLocalInertia(mass,inertia); 
btRigidBody::btRigidBodyConstructionInfo info(mass,motion,simplifiedConvexShape,inertia); 
btRigidBody* body=new btRigidBody(info); 
world->addRigidBody(body); //and let the world know about it 
bodies.push_back(body); //to be easier to clean, I store them a vector 
return body; 
} 

I попробовал изменить форму булавки, массы, трения и реституции, но ничего не мог, есть ли способ изменить центр масс, может быть, это поможет?

+0

Этот сайт «sendpace» приглашает меня загрузить mp4, и когда я пытаюсь сделать это, он пытается отправить мне dmg. ДМГ может быть безобидным, но я не буду трогать его. – Beta

ответ

1

Это будет вызвано тем, что ваша модель имеет точку поворота/трансформацию в основании или возле основания боулинга. В Bullet преобразование твердого тела является центром массы, поэтому то, что вы видите, это тяжелый центр масс, который корректирует себя с силой тяжести и, таким образом, тянет штифт вертикально.

У вас есть несколько вариантов:

  • Изменить модель так, что преобразование координаты находятся где-то недалеко от вероятного центра масс, который был бы вокруг середины толстой части нижней части тела. Это был бы самый простой способ, однако вам может потребоваться изменить ваш код позиционирования для учета смещения.
  • Создайте btCompoundShape, чтобы обернуть ваш btConvexHullShape. Это позволяет преобразовать фигуры в составную форму. Здесь есть несколько обсуждений по этому поводу: http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?p=6244&f=9&t=1506

 Смежные вопросы

  • Нет связанных вопросов^_^