يعد هذا الكتاب دليلاً شاملاً لألعاب الجبر الخطي وكشف التصادم شائعة الاستخدام، ولكنه يتطرق بإيجاز فقط إلى موضوع حل التصادم (الفيزياء). الكتاب منظم على النحو التالي:
تُستخدم جميع المواضيع التي يغطيها هذا الكتاب في البناء التدريجي لمحرك فيزياء الجسم الصلب. تطبق الفصول الثلاثة الأخيرة (14 و15 و16) فيزياء الجسيمات وفيزياء الجسم الصلب وفيزياء الجسم الناعم (القماش). يتم توفير ملحق يغطي بإيجاز الموضوعات المتقدمة والموارد لاستكشاف هذه المواضيع بالإضافة إلى موارد إضافية لاستكشاف فيزياء اللعبة.
بعض الأشكال التي تم إنشاؤها للكتاب لم تتم ترجمتها بشكل جيد للطباعة. لمعالجة هذا الأمر، قمت بتضمين جميع أشكال الكتاب الموجودة في هذا المستودع ونشرت الأشكال عبر الإنترنت على: https://github.com/gamephysicscookbook/Figers
الفصول الثلاثة الأولى من الكتاب مخصصة لتدريس الجبر الخطي الأساسي اللازم لتطوير اللعبة. يتم شرح كل مفهوم في سياق رياضي، ويتم توفير الكود المصدري لكل مفهوم ويتم توفير الصور أيضًا عندما يمكن استكشاف شيء ما بصريًا. خلال الفصول الثلاثة الأولى، تم إنشاء هياكل البيانات التالية:
vec2
)vec3
)mat2
)mat3
)mat4
)عندما يكون ذلك ممكنا، يتم تنفيذ عمليات المصفوفة بطريقة عامة. على سبيل المثال، يتم توفير التعليمات البرمجية لضرب مصفوفتين بأحجام عشوائية معًا.
وقد تناول الكتاب التقاطعات التالية:
نقطة | خط | راي | جسم كروي | ايه بي بي | OBB | طائرة | مثلث | فروستوم | |
---|---|---|---|---|---|---|---|---|---|
نقطة | |||||||||
خط | |||||||||
راي | |||||||||
جسم كروي | |||||||||
ايه بي بي | |||||||||
OBB | |||||||||
طائرة | |||||||||
مثلث | |||||||||
فروستوم |
يغطي الفصل 14 فيزياء الجسيمات الساذجة، ويهدف هذا الفصل إلى تقديم كيفية إنشاء حلقة فيزيائية والنظر في الشكل العام لحلقة الفيزياء. الفصل 15 هو الفصل الأكثر إثارة للاهتمام، فهو يطبق محركًا أساسيًا لفيزياء الجسم الصلب. المحرك الأساسي يدعم الصناديق والمجالات الموجهة، ويمكن جعل التراص يعمل ولكن لا يتم دعمه بشكل مباشر. ويغطي الفصل 16 النوابض وكيف يمكن استخدامها لتنفيذ فيزياء الجسم الناعم. العرض النهائي للكتاب عبارة عن عرض توضيحي لجسم ناعم وفيزياء القماش.
وبما أن هذا كتابي الأول، فقد تعلمت الكثير عن عملية الكتابة؛ وربما المزيد عن التخطيط. فيما يلي قائمة بالأشياء التي اكتشفتها أثناء تأليف هذا الكتاب والتي لم أخطط لها بشكل صحيح:
Quaternions : وجود quaternion أمر لا بد منه! لقد خططت لكتابة الكتاب باستخدام دورات أويلر ومصفوفات الدوران. وبينما نجح هذا، فإن الوصول إلى الكواترنيونات كان من شأنه أن يجعل الحياة أسهل كثيرًا.
المستويات : لا ينبغي أن تُرجع تقاطعات المستوى قيمة منطقية، بل يجب تصنيف التقاطع على النحو التالي: خلف، تقاطع، أمام. ويفضل، إذا كان التقاطع في الأمام أو الخلف، فأنت تريد إرجاع بعض المؤشرات للمسافة. يصبح هذا مفيدًا جدًا عند القيام بإعدام Frustum. لم أكن أعرف مدى التعمق الذي سأكتبه عن الإحباطات، لذلك قررت أن أقوم بالتقاطعات المنطقية البسيطة.
Raycasting : كان يجب أن أكتب raycast لإرجاع نتيجة raycast من البداية. تبين أن الاضطرار إلى العودة لاحقًا وإعادة كتابة واجهة برمجة تطبيقات raycasting أكثر تعقيدًا في التعبير عنها في النص مما كنت أتوقع. وكان الهدف وراء ذلك هو إبقاء الأمور بسيطة في البداية، وتعقيدها حسب الحاجة فقط.
هناك العديد من المشكلات في التنفيذ الفيزيائي للكود المصدري. تأتي هذه القضايا من حقيقة أن الجزء الفيزيائي من هذا الكتاب كان لا بد من تكثيفه في ثلاثة فصول. لم يكن هناك ما يكفي من الوقت لتغطية كل ما هو مطلوب لإنشاء نظام فيزياء الجسم الصلب القوي. أكبر مشكلة في المحرك هي عدم وجود حكم .
بدون حكم، لا يمكننا بناء حل نبضي متسلسل. وهذا يتركنا مع حل ساذج إلى حد ما. المشكلة هي أن النبضات يتم حلها لكل جهة اتصال لكل إطار. وهذا يسبب الانزلاق المفرط. لقد عوضت النقص في النبض المتسلسل بالإسقاط الخطي وانحياز فريسيتون العدواني. تفعل محركات الفيزياء القديمة شيئًا مشابهًا، من خلال الاعتماد على النوم القوي لإخفاء المشكلة. وغني عن القول أن النوم لم يتم تنفيذه.
إذا أتيحت لي الفرصة لكتابة طبعة ثانية من هذا الكتاب، فسوف أقوم بإزالة الفصول المتعلقة بالاصطدامات ثنائية الأبعاد (الفصول 4 و5 و6) وتقليل عدد صفحات فصول إدارة المشهد. أخطط لاستخدام الصفحات الإضافية لتغطية المواضيع التالية: