أي شخص سبق له التفكير في كيفية عمل الجزء الرسومي من مسرع رجعي ثنائي الأبعاد ، يمثل تقريبًا كيف يرسم هذه البلاط سيئة السمعة ، والتي ، بالمناسبة ، من التعريف لا يجب أن تكون مستطيلة. التبليط هو عن التبليط. نعم ، غالبًا ما يفهم مطورو API الحديدي ذلك ، وبالتالي تسمى الطرق drawRect وليس drawTile. يمكن أن يكون أي مستطيل بلاطة بالفعل ، لكن العكس ليس صحيحًا! وهنا السؤال قيد التخمير: لماذا تعمل المسرعات ثنائية الأبعاد باستمرار على تسريع مستقيم فقط ... الإجابة البسيطة على هذا السؤال هي أن كل شيء آخر معقد للغاية بالنسبة لقطعة بسيطة من الأجهزة. لكن هنا سأجادل. يمكن اقتراح امتداد واحد على الأقل بسيط ولكنه وظيفي للغاية لهذا التجريد الأساسي ، ما يلي.
لم أكتب إلى هبر لفترة طويلة. لأنني كنت أرغب طوال الوقت في القيام بذلك بشكل مثالي ... لدي مثل هذا المرض. في غضون ذلك ، قام هبر نفسه بتخفيض الحد بشكل كبير ، وما زلت لا أكتب ولا أكتب. لذلك وُلد مقال اليوم دون تحضير من مجرد محادثة مع صديق. ومع ذلك ، هناك أصدقاء تريد التحدث معهم بعمق ودقة.
فليكن ، ربما ، عودتي إلى الانتظام. إذا كانت مثل هذه القراءة السهلة أو الناقصة ، مع رميها على عجل في الطلاء ، ولكنها كافية للتوضيح إلى الحد الأدنى ، فإن السرد ليس مثقلًا بالتفاصيل ، ولكن لا يزال بلهجة مفاهيمية ، وسيأتي مثل المصباح ، كما هو الحال مرة واحدة ، إلى قارئ باهظ الثمن.
بعبارة أخرى ، أبحث اليوم عن حل وسط بين جودة المحتوى والوقت الذي يمكنني تخصيصه له. نأمل في التفاهم.
فلنبدأ ...
ضع في اعتبارك بالنسبة للعينة الوظيفة العامة لنسخ منطقة مستطيلة عشوائية. نرى أن هذه مجرد حلقة مزدوجة عبر الأسطر وعبر عناصر السطور:
لاحظ أن هذه الكتلة من الشفرة تتكرر عادةً بشكل تافه في مجموعات x4 لاتجاهات اجتياز كلتا الحلقتين لتنفيذ الانعكاسات:
مجموعات أخرى x2 تُعطى من خلال تبديل الترتيب بواسطة dst [x] [y] ، مما يعكس على طول المحور ص = س.
على طول الطريق ، هذه الخيارات الثمانية للانعكاسات عبارة عن دوران ممكن بمضاعفات 90 غرام مع كل انعكاسات المرآة من اليسار إلى اليمين.
والآن دعونا نلقي نظرة على كيف يمكن تعديل هذا العنصر الأساسي بشكل كبير حتى مع الحد الأدنى من الإضافات.
ربما لم يخطر ببال أحد أبدًا ، لكن لماذا لا يمكن أن يكون البلاط ، على سبيل المثال ، متوازي السطوح؟ بالنظر إلى المستقبل ، سأقول أن هذا الامتداد يحمل الحد الأدنى من النفقات العامة ، لأنه لتنفيذ ذلك ، تحتاج إلى إضافة بضع زيادات فقط لكل سطر:
نتيجة للجمع مع تبديل x / y ، نحصل على خط متوازي مع زوج من الجوانب موجهان دائمًا على طول واحد متعامد ، والآخران سيكونان بزاوية ... ماذا يعطينا هذا التافه المستلم بثمن بخس؟ حسنًا ، أولاً ، القدرة على استخدام ثلاثة إسقاطات ثابتة:
إذا لم تكن الزيادة ثابتة ، بل رقمًا كسريًا ، فيمكن أن تصبح زاوية التحول مجانية. والتي يمكن استخدامها بشكل مثالي لتأثيرات البلاط المتمايل في Scroller الجانبي: ولإنشاء
الجدران في مساحة الإسقاطات متساوية القياس:
وتذكر أن التحدث الجزئي لا يعني بالضرورة الدعم الطافي! ما يبدأ المبرمج الحديث المدلل في نسيانه أحيانًا. الطفو هو كسري مع النقطة العائمة ، ولكنه هنا غير ضروري على الإطلاق. في الواقع ، أي معالج بسجلات مزدوجة ، حيث يمكن قراءة الجزء العلوي من الزوج كقيمة منفصلة ، لديه "دعم" لنقطة ثابتة جزئية (نقطة ثابتة). علاوة على ذلك ، في هذه الحالة ، لن يتم إضافة تعليمات إضافية واحدة. (حسنًا ، باستثناء أن المنحدر سيتم تعيينه في 256 نبضة) لذلك كل شيء مجاني ، خذوا الرجال!
خطوة أخرى مماثلة يجب على القارئ اليقظ أن يسأل عنها حثيًا هي تكرار هذه الوظيفة إلى الحد الثاني لتعداد الحلقة الداخلية. يمكننا فصل زيادة النهاية بشكل منفصل. وبعد ذلك ، في الحالة العامة ، سنكون قادرين على رسم أي شبه منحرف بناءً على أحد المتعامدين (كحالة خاصة للمثلثات):
وماذا بحق الجحيم أعطوه لنا؟ ستفكر ، لكنك ستخمن على الفور أنه في اثنين فقط من استدعاءات السحب ، فأنت ببساطة تقوم بتركيب سطح من أشكال سداسية متعامدة أو معينات قطرية من مجموعة البلاط المعدة لذلك. بالمناسبة ، حالات التبليط الشائعة جدًا في صناعة الألعاب.
في أيام J2ME
J2ME , . , ,
سيكون من الرائع الحصول على دعم الأجهزة لهم في المسرع:
الباقي الموصوف هو أكثر من وظيفة إضافية ، منذ ذلك الحين يمكنك تنفيذه بشكل أفضل بشكل هادف. ومع ذلك ، إذا تحدثنا ، من بين أمور أخرى ، فقط عن ملء البدائي باللون فقط (أو نمط مسطح) ، لبعض الإضافات البسيطة إلى مساحة اللعبة الحالية ... يمكن أن
يشكل زوج مكالمات السحب أي مثلث لا يقتصر على التفاصيل (يتم تقطيعه ببساطة إلى اثنين بواسطة خط متعامد على طول الوسط النقطة ، هذا مشابه جدًا لخوارزمية الرسم الكلاسيكية الخاصة به) ومن هذا يمكن بالفعل بناء الإنشاءات في المنظور. بالمناسبة ، من شبه المنحرفات نفسها ، على سبيل المثال ، يتم الحصول على إسقاط ثلاثي الأبعاد ثابت رأسيًا DOOM1 من النموذج بشكل أساسي:
إذا كنت ترغب في ذلك ، يمكنك محاولة الطلاء باستخدام شيء أكثر أو أقل من voxel الكبيرة. اعتمادًا على درجات حرية العرض ، قم بإنفاق مكالمات سحب أكثر أو أقل. تم إصلاح أول إسقاطين للمنظور أدناه ولكن لكل منهما 4 مناظر متماثلة - بإجمالي 8 زوايا عرض. الحالة الثالثة هي حالة شائعة ويتم إصلاحها عموديًا فقط. بالدوران حول المحور الرأسي ، سوف يتناوب بين الأول والثاني:
من الأفضل تقسيم الأشكال إلى شبه منحرف إلى قطع ممتدة بشكل أكبر على طول الخط المتعامد للقطع ، قدر الإمكان ، لأن وظيفة الاستدعاء الإضافية ، على الرغم من أنها ليست باهظة الثمن ، مرتبطة بتكرارات الدورة الخارجية الوحيدة ، والتي من المستحسن أن يكون هناك عدد أقل. في الواقع ، هذا صحيح حتى بالنسبة لرسم خوارزمية المستطيل الأساسية - الرسم الأفقي أكثر كفاءة من الرسم الرأسي.
من الممكن إجراء تركيب منظور على وظيفة المكافأة في هذه المكالمات ، ولكنها تتطلب تنفيذ مقياس كسري وترتبط بإدخال معاملات تباعد إضافية لـ src ، ومعاملات الهلاك ، والتي ، علاوة على ذلك ، سوف تحتاج إلى أن يتم حسابها في ديناميكيات ثلاثية الأبعاد بدلاً من ذلك ، وهو أمر غير مستحسن لذلك. هندسة بسيطة.
حسنًا ، لإنهاء الانتقام قبل هبر من أجل مصلحتي الخاصة ، ما زلت لا أستطيع مقاومة الشرح بإيجاز من أين يأتي سحر معاملات الزيادة هذه من الناحية الجبرية. صيغة الخط المستقيم y = kx + b ، التي يتم تدريسها في المدارس ، ترسل لنا مرحبًا هنا مرتين في وقت واحد. أصبحت جميع المعاملات في متناول اليد في أماكنها:
لماذا لم أجد مسرعات أجهزة ثنائية الأبعاد مع مثل هذا التنفيذ للبلاط ، لا يمكنني إلا أن أخمن:
- كان مفهوم Tile نمطًا ثابتًا صارمًا في الممارسة العملية لدرجة أنه لم يعتقد أحد أنه يمكنهم فعل المزيد ... الحصول على المزيد.
- إما لم يرغب أحد في إنفاق حتى بضع دورات على مدار الساعة على مثل هذه الوظائف ، لأنهم لم يحللوا النتائج المنتشرة على نطاق واسع ، أو أن المطورين الذين لديهم ألعاب بسيطة في ذلك الوقت لم يخلقوا طلبًا عليها. ومع ذلك ، كان هناك وضع 7 (خوارزمية غش لتنفيذ بنية المنظور ، من خلال إخراج قطع من العفاريت المستطيلة على الحديد مع دعم القياس الكسري)
- أو أنا لست كبيرًا بما يكفي ، وأحتاج إلى الاستمرار ...