বুলেট ২.8787-এর জন্য এটি সঠিক পদ্ধতিতে একটি টিক কলব্যাক থাকা উচিত যা অভ্যন্তরীণ সিমুলেশন আপডেট হারে (সম্ভবত বেশিরভাগ হার্জ হার্টের 100) আপডেট হয় এবং কাইনমেটিক সংস্থাগুলিতে সেট ওয়ার্ল্ড ট্রান্সফর্ম () সহজেই অবস্থান আপডেট করে:
এই অংশটি ম্যানুয়ালটিতে রয়েছে:
// set the rigid body as kinematic
rigid_body->setCollisionFlags(
rigid_body->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
rigid_body->setActivationState(DISABLE_DEACTIVATION);
...
এই অংশটি বের করা আরও জটিল ছিল:
void externalTickCallback(btDynamicsWorld *world, btScalar timeStep)
{
// get object passed into user data point
Foo* foo = static_cast<Foo*>(world->getWorldUserInfo());
... loop through all the rigid bodies, maybe foo has them
{
if (rigid_body->getCollisionFlags() & btCollisionObject::CF_KINEMATIC_OBJECT)
{
btVector3 kinematic_linear_vel = ... // get velocity from somewhere
btTransform trans;
rigid_body->getMotionState()->getWorldTransform(trans);
trans.setOrigin(trans.getOrigin() + kinematic_linear_vel * time_step);
// TODO support angular velocity
rigid_body_->getMotionState()->setWorldTransform(trans);
}
}
}
...
my_dynamics_world->setInternalTickCallback(tickCallback, static_cast<void*>(this), true);
এটি ছিল বিটিআরজিডবডি এইচ https://github.com / বুলেটফিজিক্স / বুলেট 3/blob/master/src/BulletDynamics/ ডায়নামিকস / বিটিগ্রিগডবডি এইচ : র সহায়ক ডকুমেন্টেশন
/// - সি) গতিময় বস্তু, যা ভর ব্যতীত বস্তু, তবে ব্যবহারকারী সেগুলি সরাতে পারে। ওয়ান-ওয়ে ইন্টারঅ্যাকশন রয়েছে এবং বুলেট টাইমস্টেপ এবং পূর্ববর্তী এবং বর্তমান বিশ্বের রূপান্তরের উপর ভিত্তি করে একটি বেগ গণনা করে।
setLinearVelocity () গতিযুক্ত বস্তুর জন্য কাজ করে না (সম্ভবত এটি পূর্ববর্তী সংস্করণগুলিতে ব্যবহৃত হত?) তবে ডায়নামিক্স ওয়ার্ল্ড সেট ওয়ার্ল্ড ট্রান্সফর্ম () বোঝে এবং গতিময় বস্তুতে লাইনারওয়েলোসিটি () -র কাছে কলগুলি কল কলব্যাকের সেট সেটটি ফিরিয়ে দেবে (যদি সম্ভবত সেই গতিবেগগুলি অভ্যন্তরীণ টিক থেকে টিকের দিকে পরিবর্তিত হয়) তবে এটি সম্ভবত গড়ে ফিরে আসবে।
https://github.com/bulletphysics/bullet3/issues/1204 - ইস্যু পোস্টারের সঠিক ধারণা আছে তবে প্রতিক্রিয়া সহায়ক নয়।