কোলিশন ডিটেকশন এবং রেসপন্স

ফিজিক্স ইঞ্জিন ইন্টিগ্রেশন - ওয়েবজিএল (WebGL) - Web Development

292

কোলিশন ডিটেকশন (Collision Detection) কি?

কোলিশন ডিটেকশন হল একটি গেম বা 3D গ্রাফিক্স সিস্টেমে অবজেক্টগুলির মধ্যে সংঘর্ষ চিহ্নিত করার প্রক্রিয়া। যখন দুটি অবজেক্ট একে অপরকে স্পর্শ করে বা একে অপরের মধ্যে চলে যায়, তখন সেই সংঘর্ষ বা কোলিশন ডিটেক্ট করতে হয়। ওয়েবজিএল (WebGL) এ কোলিশন ডিটেকশন একটি গুরুত্বপূর্ণ বিষয়, বিশেষ করে 3D গেমস বা সিমুলেশন ডেভেলপমেন্টে।

কোলিশন ডিটেকশনের মূল লক্ষ্য হল গেমে অবজেক্টগুলির আচরণ সঠিকভাবে তৈরি করা, যেমন—একটি বল যখন দেয়ালে আঘাত করবে বা একটি চরিত্র যখন অন্য একটি চরিত্রের সাথে সংঘর্ষ করবে, তখন তার প্রতিক্রিয়া কী হবে।


কোলিশন ডিটেকশনের প্রকার

1. এAB (Axis-Aligned Bounding Box) কোলিশন

এAB কোলিশন ডিটেকশন পদ্ধতিতে দুটি অবজেক্টের চারপাশে একটি সোজা সীমানা বা বাউন্ডিং বক্স তৈরি করা হয়। এই বক্সগুলো সাধারণত X, Y, এবং Z অক্ষের সাথে সঙ্গতিপূর্ণ থাকে (এটি "Axis-Aligned" বলা হয়)। দুটি বক্স একে অপরকে স্পর্শ করলে সংঘর্ষ ঘটে।

function checkAABB(box1, box2) {
    return (box1.min.x < box2.max.x && box1.max.x > box2.min.x) &&
           (box1.min.y < box2.max.y && box1.max.y > box2.min.y) &&
           (box1.min.z < box2.max.z && box1.max.z > box2.min.z);
}

এখানে, box1 এবং box2 হল দুটি বাউন্ডিং বক্স এবং আমরা চেক করছি যে তাদের মধ্যে সংঘর্ষ ঘটছে কিনা।

2. স্ফিয়ার কোলিশন (Sphere Collision)

এটি সহজ কোলিশন ডিটেকশন পদ্ধতি, যেখানে দুটি অবজেক্টকে স্ফিয়ার আকারে কল্পনা করা হয়। স্ফিয়ার কোলিশনে দুটি স্ফিয়ার একে অপরকে স্পর্শ করলে তাদের মধ্যে কোলিশন ঘটে।

function checkSphereCollision(sphere1, sphere2) {
    const distance = Math.sqrt(Math.pow(sphere2.x - sphere1.x, 2) +
                               Math.pow(sphere2.y - sphere1.y, 2) +
                               Math.pow(sphere2.z - sphere1.z, 2));
    return distance < (sphere1.radius + sphere2.radius);
}

এখানে, sphere1 এবং sphere2 হল দুটি স্ফিয়ার, এবং তাদের মধ্যে সংঘর্ষ চেক করা হচ্ছে।

3. পলিগনাল কোলিশন (Polygonal Collision)

এটি আরও জটিল কোলিশন ডিটেকশন যেখানে অবজেক্টের সীমানা পলিগনাল আকারে গণনা করা হয়। এই ধরনের কোলিশন ডিটেকশন সাধারণত 3D গেমস ও সিমুলেশনগুলিতে ব্যবহৃত হয়, যেখানে অবজেক্টের আকৃতি আরও জটিল হয়।


কোলিশন রেসপন্স (Collision Response)

কোলিশন রেসপন্স হল সেই প্রক্রিয়া যার মাধ্যমে একটি অবজেক্টের উপর কোলিশনের প্রভাব দেখানো হয়। যখন দুটি অবজেক্ট একে অপরকে স্পর্শ করে, তাদের আচরণ বা প্রতিক্রিয়া কেমন হবে—এটি কোলিশন রেসপন্সে নির্ধারিত হয়। কোলিশন রেসপন্সের কিছু সাধারণ ধরনের অন্তর্ভুক্ত:

1. বল প্রতিক্রিয়া (Elastic Collision)

এটি একটি প্রাকৃতিক কোলিশন রেসপন্স যেখানে দুইটি বল একে অপরকে স্পর্শ করার পর ফিরে আসে। উদাহরণস্বরূপ, একটি বল যখন দেয়ালে আঘাত করে তখন এটি প্রতিফলিত হয়। এই রেসপন্স সাধারণত গেমে ডিনামিক অবজেক্টের জন্য ব্যবহৃত হয়।

function elasticCollision(object1, object2) {
    let normal = {x: object2.x - object1.x, y: object2.y - object1.y};
    let relativeVelocity = {x: object1.vx - object2.vx, y: object1.vy - object2.vy};

    let dotProduct = normal.x * relativeVelocity.x + normal.y * relativeVelocity.y;
    let normalizingFactor = 2 * dotProduct / (object1.mass + object2.mass);

    object1.vx -= normalizingFactor * object2.mass * normal.x;
    object1.vy -= normalizingFactor * object2.mass * normal.y;

    object2.vx += normalizingFactor * object1.mass * normal.x;
    object2.vy += normalizingFactor * object1.mass * normal.y;
}

এখানে, দুটি অবজেক্টের মধ্যে বল প্রতিক্রিয়া গণনা করা হচ্ছে। তাদের গতি পরিবর্তন হতে পারে কোলিশনের পর।

2. ইনএলাস্টিক কোলিশন (Inelastic Collision)

এই ধরনের কোলিশনে, দুটি অবজেক্ট একে অপরকে স্পর্শ করার পর একে অপরের মধ্যে কিছু শক্তি হারায়, এবং তারা একসাথে চলতে থাকে। উদাহরণস্বরূপ, দুটি গাড়ির মধ্যে সংঘর্ষ হলে তাদের গতির পরিবর্তন হয় এবং কিছু শক্তি অপচয় হয়।

function inelasticCollision(object1, object2) {
    let normal = {x: object2.x - object1.x, y: object2.y - object1.y};
    let relativeVelocity = {x: object1.vx - object2.vx, y: object1.vy - object2.vy};

    let dotProduct = normal.x * relativeVelocity.x + normal.y * relativeVelocity.y;
    let normalizingFactor = 2 * dotProduct / (object1.mass + object2.mass);

    let newVx1 = object1.vx - normalizingFactor * object2.mass * normal.x;
    let newVy1 = object1.vy - normalizingFactor * object2.mass * normal.y;
    let newVx2 = object2.vx + normalizingFactor * object1.mass * normal.x;
    let newVy2 = object2.vy + normalizingFactor * object1.mass * normal.y;

    // ইনএলাস্টিক কোলিশনে কিছু শক্তি অপচয় হয়, এখানে একীভূত গতি রাখা হচ্ছে
    object1.vx = newVx1 * 0.9; // শক্তির কিছু হারানো
    object1.vy = newVy1 * 0.9;
    object2.vx = newVx2 * 0.9;
    object2.vy = newVy2 * 0.9;
}

3. বাউন্সিং (Bouncing)

বাউন্সিং কোলিশন রেসপন্সে, একটি অবজেক্ট অন্যটির সাথে সংঘর্ষের পর প্রতিফলিত হয় এবং নতুন গতিতে চলে যায়। এই ধরনের কোলিশন সাধারণত গেমে আছড়ে পড়া অবজেক্টগুলির জন্য ব্যবহৃত হয়।

function bounceBack(object, wall) {
    if (object.x >= wall.x && object.x <= wall.x + wall.width) {
        object.vx = -object.vx; // X অক্ষের সাথে বাউন্সিং
    }
}

এখানে, অবজেক্ট একটি দেয়ালে আঘাত করলে তার গতির দিকে বিপরীত দিকের পরিবর্তন ঘটছে।


ওয়েবজিএল-এ কোলিশন ডিটেকশন এবং রেসপন্স ব্যবহারের উদাহরণ

// দুটি স্ফিয়ারের মধ্যে কোলিশন ডিটেকশন এবং রেসপন্স
function detectAndRespondToCollision(sphere1, sphere2) {
    if (checkSphereCollision(sphere1, sphere2)) {
        elasticCollision(sphere1, sphere2); // সংঘর্ষের পর প্রতিক্রিয়া
    }
}

// কোলিশন ডিটেকশন ফাংশন এবং রেসপন্স
detectAndRespondToCollision(sphere1, sphere2);

এখানে, দুটি স্ফিয়ারের মধ্যে সংঘর্ষ ডিটেক্ট করা হচ্ছে এবং কোলিশনের পর তাদের প্রতিক্রিয়া আপডেট করা হচ্ছে।


সারাংশ

ওয়েবজিএল (WebGL) এ কোলিশন ডিটেকশন এবং রেসপন্স একটি গুরুত্বপূর্ণ ভূমিকা পালন করে গেম বা 3D গ্রাফিক্স সিস্টেমে। কোলিশন ডিটেকশনের জন্য বিভিন্ন পদ্ধতি যেমন এAB, স্ফিয়ার কোলিশন এবং পলিগনাল কোলিশন ব্যবহার করা হয়, এবং কোলিশন রেসপন্সের মাধ্যমে অবজেক্টগুলির আচরণ পরিচালনা করা হয়। কোলিশন ডিটেকশন এবং রেসপন্স গেম বা সিমুলেশনগুলির মধ্যে ইন্টারঅ্যাকশন এবং বাস্তবসম্মত মেকানিক্স তৈরি করতে সহায়তা করে।

Content added By
Promotion

Are you sure to start over?

Loading...