Я попытался установить сначала ограничение 6dof. Однако, независимо от того, добавляю я ограничение или нет, твердые тела ведут себя одинаково, падая прямо на землю, и я могу свободно перетаскивать их и бросать. Поэтому я добавил ограничение ползунка, чтобы проверить, была ли это просто проблема с моей настройкой 6dof. Все еще не повезло. Я посмотрел на демонстрационные примеры ограничений маркера, даже некоторые из моего старого кода, который успешно использует ограничения маркера. Я упускаю что-то простое в моей инициализации, которое, возможно, свежие глаза могут заметить?
редактировать: используя пулю 2.81 ред. 2613
настройка пули
btBroadphaseInterface* broadphase =new btDbvtBroadphase();
btDefaultCollisionConfiguration* collisionConfiguration =new btDefaultCollisionConfiguration();
btCollisionDispatcher* dispatcher =new btCollisionDispatcher(collisionConfiguration);
btSequentialImpulseConstraintSolver* solver =new btSequentialImpulseConstraintSolver;
bullet_dynamics_world =new btDiscreteDynamicsWorld(
dispatcher,broadphase,solver,collisionConfiguration);
bullet_dynamics_world->setGravity(btVector3(0,-10.0f,0));
установка твердого тела
btConvexHullShape* part_shape(new btConvexHullShape());
part_shape->addPoint(vp0);
part_shape->addPoint(vp1);
part_shape->addPoint(vp2);
part_shape->addPoint(vp3);
btVector3 intertia(0.0f,0.0f,0.0f);
part_shape->calculateLocalInertia(1.0,intertia);
start_trans.setOrigin(start_trans.getOrigin()+center);
quetz::CBulletMotionState* motion_state(new CBulletMotionState(part, start_trans));
btRigidBody* part_body(0);
btRigidBody::btRigidBodyConstructionInfo inf(1.0f, motion_state, part_shape,intertia);
part_body =new btRigidBody(inf);
part_body->setUserPointer(this);
part_body->setMotionState(motion_state);
part_body->setWorldTransform(motion_state->absolute_transform);
part_body->setActivationState(DISABLE_DEACTIVATION);
core->bullet_dynamics_world->addRigidBody(part_body);
код установки ограничения
btTransform fromA(btTransform::getIdentity());
btTransform fromB(btTransform::getIdentity());
fromA.setOrigin( btVector3(-1.0f,0.0f,0.0f));
fromB.setOrigin( btVector3(1.0f,0.0f,0.0f));
btRigidBody* ref_bodyA(partA->m_physics);
btSliderConstraint* bt_constraint =
new btSliderConstraint(
*ref_bodyA,
fromB,true);
bt_constraint->setLowerLinLimit(-10.0f);
bt_constraint->setUpperLinLimit(10.0f);
bt_constraint->setLowerAngLimit(0.0f);
bt_constraint->setUpperAngLimit(0.0f);
core->bullet_dynamics_world->addConstraint(bt_constraint, false);
Задача ещё не решена.
Других решений пока нет …