Извините, что задаю такой простой вопрос о пуле. Однако у меня возникла проблема. Вот установка:
У меня есть мир без гравитации. Когда я нажимаю клавишу, в центре мира создается поле размером 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;
линия виновник.
Должен ли я рассчитать массу моих предметов? Это достаточно просто для куба, но как насчет странной выпуклой формы? Есть ли способ получить пулю, чтобы сделать это для меня?
Да, масса является виновником. Представьте, что ваша большая коробка — пустой деревянный ящик, а маленькая коробка — твердый кубик железа. Огромная разница в размерах, но равная масса. Теперь ваша физика кажется правильной, верно?
Да, вы должны предоставить массу. Считаете ли вы это или просто утверждаете, что «этот ящик весит 20 кг» — решать вам. На самом деле ожидание того, что кто-то другой рассчитает массу для вас, только усугубит вашу проблему, потому что вам придется указать материалы, плотность материала и распределение материала ваших объектов помимо его геометрии. Если вы хотите пойти по этому пути, есть множество других инструментов, которые помогут вам с такими расчетами. Но я уверен, что вы согласны с тем, что просто указывать массу методом проб и ошибок гораздо проще.
Других решений пока нет …