Unconfigured Ad Widget

تقليص

إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

أسرار و خدع برمجية 4

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • أسرار و خدع برمجية 4

    بسم الله الرحمن الرحيم
    مقدمة :

    هذا هو الموضوع الرابع من سلسلة مواضيع (أسرار و خدع في برمجة الألعاب) , سنتكلم في هذا الموضوع عن التصادم , كيف يفعلونها في الالعاب, و تذكر ان هذا الموضوع لا يشرح علي لغة او برنامج معين و انما نشرح التكنيك ليستعمل علي اى لغة او برنامج.

    اكتشاف التصادم :

    نحتاج دائما في الالعاب ان نكشف عن التصادم , لنعرف مثلا اذا كانت هناك طلقة اصطدمت باللاعب , او ان طائرة اللاعب اصطدمت بالأرض او مبني !! ,هناك اكثر من تكنيك يستخدم لاكتشاف التصادم في الألعاب و كل تكنيك يختلف في دقته و تكلفته للجهاز !! , فالنبدأ و نري بعض هذه الطرق .

    الطريقة الأولي (المسافة) :

    الطريقة الأولي هي ان نقيس المسافة بين المجسمين و اذا كانت المسافة اقل من عدد معين فنعتبر ان المجسمان متصطدمان , فمثلا هذه الصورة :




    فالان نعتبر ان المسافة بين المجسمين 80 فليس هناك تصادم و لكن الصورة هنا :





    المسافة اصبحت 50 فأصبح هناك تصادم و لكن لو تلاحظ ان هذا النوع من التصادم غير دقيق فشكل المجسم حجموا غير متوازي فمثلا لو حاولنا ان نفيس التصادم بهذه المنقطة من الجنب فستحصل مشكلة هكذا :






    حسنا المسافة هنا 50 و طبقا لحسابتنا فهذا الدبابتان بينهم تصادم مع انهم بعيدين عن بعض تماما !! , حسنا نستنتج من هذا ان هذه الطريقة للتحقق من التصادم ليست دقيقة و لكن من الممكن استعمالها في العاب بسيطة و لكنها ايضا كما تري غير مكلفة للجهاز تمام .

    الطريقة الثانية (Bounding box,sphere)

    تقوم هذه الطريقة علي عمل مربع او دائرة تعبر عن المجسم و يكون لهذا المربع او الدائرة خصائص و هي : المكان و الحجم , بمعني ان لكل دبابة من الدبابات التي في الصور يكون هناك دائرة وهمية غير موجودة غير في حساباتنا تكون مثل هذه :




    حسنا لو تلاحظ هذه الكور نحسب من خلالها التصادم بطريقة معينة و اذا كنت مهتم بالطريقة الحسابية مع ان معظم المحركات توفرها من دون علمك و لكن ها هي :

    relPosition = sphere1 position – sphere2 position
    dist = relPosition * relPosition
    minDist = sphere1 radius + sphere2 radius
    if (dist <= minDist * minDist)
    {
    collision
    }
    Else
    {
    No collision
    }
    فبهذه العملية يعرف الجهاز اذا كان هناك اصطدام ام لأ و لكن ايضا هناك مشكلة فهذه العملية غير دقيقة فالمجسم ليست علي شكل دائرة فمن الجانب ستحصل مشكلة ايضا :




    التكملة في الرد القادم
    .
    Egypt


    I Love Direct-X

    سبحان الله و بحمده سبحان الله العظيم
    اللهم صلي وسلم و بارك علي سيدنا محمد

  • #2
    مع انهم ايضا يبعدوا عن بعض و لكنه سيحسب ان هناك تصادم و هذا لأن الشكل ليس متوازي من جميع اجزاءه , حسنا هذا النوع من التصادم أدق من النوع الذي مدي و لكنه ما زال ليس بالدقة المطلوبة , حسنا ماذا لو استعملنا في هذا النوع بدل الدائرة الصندوق , ففي بعض الأحيان نستعمل الصندوق لأنه يكون أدق كما سنري , و لكنه أدق في بعض الحالات فقط , و لكن للصندوق خصائص أخري فتقول للمحرك بداية الصندوق من الأتجاه الx و حجموا في هذا الاتجاه و ايضا بداية الصندوق من الاتجاه z و حجموا من هذا الاتجاه و هكذا ايضا بالنسبة للy ,فستكون هذه الحال من الأمام :



    حسنا من الأمام الحساب جيد و لنري من الجانب ايضا سيكون ليس هناك مشاكل , و اخيرا هذا ما نريد , و لكن ايضا هذه ليست بالدقة المطلوبة فعليك ان تري هذه الصورة :



    حسنا في هذه الحالة سيحسب انه هناك تصادم و لكن كما تري ليس هناك تصادم و ايضا فأنت ستقوم بعمل صندوق او دائرة لكل مجسم لديك و هذا عمل متعب و في الاخر الدقة ليس كما نريد و ايضا تخيل لو المجسم يقوم بالدوران فستكون الدقة اسوأ اكثر كهذه الصورة :



    حسنا بهذه الطريقة تعتقد ان هذه الطريقة فاشلة , هي ليست كذلك بل هي تنفع في بعض الحالات و ما زالت تستعمل لأنها خفيفة علي الجهاز , و في بعض الأحيان لا تحتاج الي تكنيكات افضل , و لكن هل تقول لنا ان هذا كل ما نستطيع فعله , الأمر ليس كذلك و لكننا سنشرح التكنيكات الأفضل في الدرس القادم ان شاء الله ^_^ .
    Egypt


    I Love Direct-X

    سبحان الله و بحمده سبحان الله العظيم
    اللهم صلي وسلم و بارك علي سيدنا محمد

    تعليق


    • #3
      طب انا اقولك ايه مش كفاية عليك اقولك انك راجل محترم وابن حلال ربنا يخليك لينا يا جينيرال وكل سنة وانت طيب
      حلمى ان اكون مصمم العاب و3دى ناجح

      ادعووووووووووووولى

      عضو في نادي محبي البطاطا

      تعليق


      • #4
        جميل ...
        يعطيك العافية يا جينيرال . هذا جزء مهم في صناعة الألعاب .

        تعليق


        • #5
          بارك الله فيك

          بإنتظار الجزء القادم

          لنعرف أفضل الطرق

          تعليق


          • #6
            فعلاً بالإنتظار

            <<Nobody>> سابقاً

            تعليق


            • #7
              تسلم اخي جينيرال الدرس من شكلو رائع
              ونحن في الانتظار المزيد
              ................................
              إذا أردت أن تعصي الله
              فاختبئ في مكان لا يراك الله فيه ..


              إذا أردت أن تعصي الله ..
              فلا تعصه فوق أرضه ..


              إذا أردت أن تعصي الله ..
              فلا تأكل من رزقه ..

              تعليق


              • #8
                المشاركة الأصلية بواسطة nacasho مشاهدة المشاركة
                طب انا اقولك ايه مش كفاية عليك اقولك انك راجل محترم وابن حلال ربنا يخليك لينا يا جينيرال وكل سنة وانت طيب
                و الله هذا من ذوقك بس و كل سنة و انت طيب

                جميل ...
                يعطيك العافية يا جينيرال . هذا جزء مهم في صناعة الألعاب .
                شاكر مرورك أسامة

                بارك الله فيك

                بإنتظار الجزء القادم

                لنعرف أفضل الطرق
                فعلاً بالإنتظار
                تسلم اخي جينيرال الدرس من شكلو رائع
                ونحن في الانتظار المزيد

                انتظروا الدرس القادم ان شاء الله يعجبكم و شاكر مروركم ^_^

                و اتمني ان الدرس افادكم ...
                Egypt


                I Love Direct-X

                سبحان الله و بحمده سبحان الله العظيم
                اللهم صلي وسلم و بارك علي سيدنا محمد

                تعليق


                • #9
                  ما شاء الله عليك مبدع دائما بمقالاتك - المقالة جميلة جدا وفعلا تبرز مهارات كشف التصادم بانواعة بارك الله فيك وننتظر المزيد

                  مع تحياتى
                  عميد المبرمجين العرب سابقا

                  تعليق


                  • #10
                    جزاك الله خيراً استاذ جنرال مواضيع روعة .
                    لكن عندي ملاحظة هنا :
                    المشاركة الأصلية بواسطة general1 مشاهدة المشاركة
                    و ايضا تخيل لو المجسم يقوم بالدوران فستكون الدقة اسوأ اكثر كهذه الصورة :
                    في البلندر عند استخدام هذه الطريقة يقوم المكعب بالدوران مع المجسم .
                    سنشرح التكنيكات الأفضل في الدرس القادم ان شاء الله ^_^ .
                    في انتظار الدرس
                    بالتوفيق
                    .
                    C. 4d سابقاً

                    تعليق


                    • #11
                      المشاركة الأصلية بواسطة ahmedbna مشاهدة المشاركة
                      ما شاء الله عليك مبدع دائما بمقالاتك - المقالة جميلة جدا وفعلا تبرز مهارات كشف التصادم بانواعة بارك الله فيك وننتظر المزيد
                      و الله ده من ذوقك بس , شاكر لك مرورك ^_^

                      في البلندر عند استخدام هذه الطريقة يقوم المكعب بالدوران مع المجسم .
                      واضح ان ليس جميع المحركات تفعل هذا , فيعض المحركات تدعم تدوير الbounding box و بعضها لا يدعمها مثل الXNA و شكرا علي ملاحظتك
                      Egypt


                      I Love Direct-X

                      سبحان الله و بحمده سبحان الله العظيم
                      اللهم صلي وسلم و بارك علي سيدنا محمد

                      تعليق

                      يعمل...
                      X