আমি বুলেট ব্যবহার করে প্রথম ব্যক্তির ক্যামেরা প্রয়োগ করেছি - এটি ক্যাপসুল আকৃতির কঠোর শরীর body আমি কেবল বুলেটটি কয়েক দিনের জন্য ব্যবহার করছি এবং পদার্থবিদ্যার ইঞ্জিনগুলি আমার কাছে নতুন। আমি btRigidBody::setLinearVelocity()
এটিকে সরাতে ব্যবহার করি এবং এটি বিশ্বের সাথে পুরোপুরি সংঘর্ষ হয়। একমাত্র সমস্যা হ'ল ওয়াই-মান অবাধে স্থানান্তরিত হয়, যা আমি দেহ সরিয়ে নেওয়ার আগে অনুবাদ ভেক্টরের ওয়াই-মানটি অস্থায়ীভাবে শূন্যে সেট করে সমাধান করেছি। এটি উচ্চতা থেকে পড়ে যাওয়া বাদে সমস্ত ক্ষেত্রে কাজ করে।
যখন দেহ কোনও লম্বা বস্তুটি ফেলে দেয়, আপনি এখনও চলাচল করতে পারেন যেহেতু অনুবাদ ভেক্টরের ওয়াই-ভ্যালু শূন্যে সেট করা হচ্ছে, যতক্ষণ না আপনি চলন্ত থামিয়ে মাটিতে পড়ে যান (গতিবেগ কেবল যখন চলন্ত অবস্থায় সেট করা থাকে)) সুতরাং এটির সমাধানের জন্য আমি বিশ্বের ওয়াই-মান নির্ধারণ করতে, এবং সেই মান এবং ক্যামেরার বডিটির ওয়াই-মানের মধ্যে পার্থক্য পরীক্ষা করে, এবং যদি অক্ষম করতে বা গতি কমিয়ে দেয় তবে শরীরের থেকে একটি রশ্মি কাস্ট করার চেষ্টা করতে চাই if পার্থক্য যথেষ্ট বড়।
আমি কেবল একটি রশ্মির নিক্ষেপ করতে এবং এটি যেখানে আঘাত করেছিল বিশ্বের ওয়াই-মান নির্ধারণে কিছুটা আটকে আছি। আমি এই কলব্যাকটি প্রয়োগ করেছি:
struct AllRayResultCallback : public btCollisionWorld::RayResultCallback{
AllRayResultCallback(const btVector3& rayFromWorld, const btVector3& rayToWorld)
: m_rayFromWorld(rayFromWorld), m_rayToWorld(rayToWorld), m_closestHitFraction(1.0){}
btVector3 m_rayFromWorld;
btVector3 m_rayToWorld;
btVector3 m_hitNormalWorld;
btVector3 m_hitPointWorld;
float m_closestHitFraction;
virtual btScalar addSingleResult(btCollisionWorld::LocalRayResult& rayResult, bool normalInWorldSpace)
{
if(rayResult.m_hitFraction < m_closestHitFraction)
m_closestHitFraction = rayResult.m_hitFraction;
m_collisionObject = rayResult.m_collisionObject;
if(normalInWorldSpace){
m_hitNormalWorld = rayResult.m_hitNormalLocal;
}
else{
m_hitNormalWorld = m_collisionObject->getWorldTransform().getBasis() * rayResult.m_hitNormalLocal;
}
m_hitPointWorld.setInterpolate3(m_rayFromWorld, m_rayToWorld, m_closestHitFraction);
return 1.0f;
}
};
এবং আন্দোলনের কার্যক্রমে, আমার এই কোডটি রয়েছে:
btVector3 from(pos.x, pos.y + 1000, pos.z); // pos is the camera's rigid body position
btVector3 to(pos.x, 0, pos.z); // not sure if 0 is correct for Y
AllRayResultCallback callback(from, to);
Base::getSingletonPtr()->m_btWorld->rayTest(from, to, callback);
সুতরাং আমার কাছে callback.m_hitPointWorld
ভেক্টর রয়েছে, যা মনে হয় কেবল প্রতিটি ফ্রেমের ক্যামেরার অবস্থান প্রদর্শন করে। কাস্টিং রশ্মির উদাহরণগুলির পাশাপাশি বুলেট ডকুমেন্টেশনের জন্য আমি গুগল অনুসন্ধান করেছি এবং উদাহরণ খুঁজে পাওয়া খুব কঠিন ছিল। একটি উদাহরণ সত্যই আমার প্রয়োজন।
বা সম্ভবত বুলেটের অনমনীয় দেহটি মাটিতে রাখার জন্য কোনও পদ্ধতি আছে?
আমি একটি রেন্ডারিং ইঞ্জিন হিসাবে ওগ্র্রে 3 ডি ব্যবহার করছি, এবং একটি রশ্মি নিচে ফেলে দেওয়া এর সাথে একেবারে সোজা, তবে আমি সরলতার জন্য বুলেটের মধ্যে সমস্ত রশ্মির কাস্টিং রাখতে চাই।
যে কেউ ডান দিক সম্পর্কে নির্দেশ পারে? ধন্যবাদ।