Мне жаль задавать такой простой вопрос о пуле. Однако у меня возникла проблема. Вот настройка:
У меня есть мир без гравитации. Когда я нажимаю клавишу, в центре мира создается поле 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;
.
Ожидается ли, что я вычислю массу своих объектов? Это достаточно просто для куба, но как насчет какой-нибудь странной выпуклой формы? Есть ли способ заставить пулю сделать это за меня?