حول تنسيق تحويل نماذج 3D
مادة
أولاً وقبل كل شيء
قد ترى غالبا صور 3D على شاشات التلفزيون وشاشات العرض في الألعاب ، ولكن كيف يمكنك عرض الأشياء الموجودة في مساحة 3D ، مثل الشخصيات والمباني التي تتحرك على الشاشة ، على شاشة 2D؟
في ألعاب 2D ، لا يوجد سوى عناصر ثنائية الأبعاد من "X و Y" كقيم إحداثيات ، والشاشة هي أيضا 2D ، لذلك إذا قمت برسم كائن عن طريق تحديد موضع الإحداثيات ل X و Y ، فستفهم بشكل حدسي كيف سيتم رسمه في أي موضع.
ومع ذلك ، في 3D ، ليس الأمر بهذه السهولة. كما يوحي الاسم ، 3D هو "3 بعد" ويحتوي على ثلاث معلومات إحداثيات: "X و Y و Z". نظرا لأن الإحداثيات تختلف عن الشاشة 2D ، فلا يمكن رسم الكائن كما هو.
ثم ، ما يجب فعله هو "تحويل المعلومات ثلاثية الأبعاد إلى معلومات ثنائية الأبعاد". يشار إلى هذا عادة باسم "تحويل الإحداثيات". ضع في اعتبارك أن هذا التحول الإحداثي ضروري لبرمجة 3D.
هناك عدة أنواع من تحويلات الإحداثيات لتحويل 3D إلى 2D ، ولكن هناك ثلاثة أنواع رئيسية من تحويلات الإحداثيات التي يتعامل معها المبرمجون: "تحويل العالم" و "تحويل العرض" و "تحويل الإسقاط". هنا ، سنشرح كل ما يتعلق بتنسيق التحويل.
أنظمة الإحداثيات اليسرى واليمنى
في 3D ، هناك نظامان إحداثيان ، "نظام الإحداثيات الأيسر" و "نظام الإحداثيات الأيمن" ، اللذان لهما اتجاهات مختلفة لكل إحداثي كما هو موضح في الشكل أدناه.
استخدم Direct3D في المقام الأول نظام إحداثيات أعسر ، ولكن هناك أيضا وظائف لحساب أنظمة الإحداثيات اليمنى. ومع ذلك ، توفر XNA طرق حساب فقط لأنظمة الإحداثيات اليمنى. يبدو أن هذا يتماشى مع حقيقة أن التطبيقات الأخرى غالبا ما تستخدم أنظمة إحداثيات اليد اليمنى.
تستخدم جميع نصائح XNA على هذا الموقع نظام الإحداثيات الأيمن.
نظام الإحداثيات المحلية (نظام الإحداثيات النموذجي)
يحتوي كل نموذج على نظام إحداثيات يركز على الأصل. عند إنشاء نموذج باستخدام برنامج النمذجة ، أعتقد أنه من الأسهل فهمه إذا كنت تتخيل إنشائه مع الأصل كمركز.
نظام الإحداثيات العالمي
يسمح لك نظام الإحداثيات العالمي بوضع النموذج في أي مكان. إذا لم تفعل شيئا في هذا التحول العالمي ، وضع النموذج في الأصل بنفس طريقة الإحداثيات المحلية. التنسيب ليس فقط للانتقال من الأصل ، ولكن أيضا للتدوير والقياس.
عرض نظام الإحداثيات
بمجرد وضع النموذج في إحداثيات العالم ، تحتاج إلى معلومات حول المكان الذي تبحث فيه وأين تنظر إلى مساحة 3D. هذا ما نسميه "عرض التحولات". غالبا ما يتم تمثيل تحويلات العرض بشكل عام ككاميرات.
المعلمات المطلوبة لهذا التحويل هي "موضع الكاميرا" و "نقطة اهتمام الكاميرا" و "الاتجاه التصاعدي للكاميرا". يتم تحديد اتجاه الكاميرا من خلال هذه المعلمات الثلاثة. يوضح الشكل أدناه الكاميرا من منظور طرف ثالث.
يظهر الشكل أدناه بالفعل من وجهة نظر الكاميرا بالترتيب الموضح في الشكل أعلاه (في هذه المرحلة ، لم نقم بعد بتحويل الإحداثيات إلى الشاشة ، لذا فهي مجرد صورة).
في الشرح السابق ، يبدو أن الكاميرا موضوعة ويتم تحويل الإحداثيات ، ولكن في الحساب الفعلي ، يتم تحويل إحداثيات العالم وفقا لموضع الكاميرا واتجاهها. لذلك ، الأصل هو موضع الكاميرا كما هو موضح في الشكل أدناه.
نظام الإحداثيات الإسقاطية
بمجرد أن تقرر من أي موضع لعرض مساحة 3D ، فإن الخطوة التالية هي معالجة عرض "الأشياء الصغيرة البعيدة" و "الأشياء الكبيرة القريبة". وهذا ما يسمى التحول الإسقاطي. هناك طريقتان لتحويل الإسقاط ، "إسقاط المنظور" و "الإسقاط الإملائي" ، ولكن صورة "إسقاط المنظور" شائعة الاستخدام هي كما يلي.
يستخدم إسقاط المنظور المعلمات التالية: زاوية العرض ونسبة العرض إلى الارتفاع وموضع المشبك الأمامي وموضع المشبك الخلفي. ستظهر المنطقة المسماة "frustum" في الشكل أعلاه أخيرا على الشاشة.
تحدد "زاوية الرؤية" نطاق المشاهدة المرئي من الكاميرا. يؤدي تقليل زاوية التكبير ، وزيادة التصغير. ستكون زاوية الرؤية هي القيمة الرأسية للإحباط.
تستخدم نسبة العرض إلى الارتفاع لتحديد زاوية الرؤية الأفقية ، في حين أن زاوية الرؤية هي زاوية رأسية. عادة ما يتم تحديد الزاوية الأفقية من خلال "زاوية العرض × نسبة العرض إلى الارتفاع" ، ونسبة العرض إلى الارتفاع هي في الأساس قيمة "العرض ÷ الارتفاع" للشاشة التي تحاول عرضها. إذا قمت بتغيير هذه القيمة ، فسيظهر الكائن 3D المعروض ليمتد أفقيا أو رأسيا.
يتم تحديد موضع المشبك الأمامي وموضع المشبك الخلفي لتحديد ما إذا كان الكائن معروضا في النطاق الأمامي أو الخلفي. نظرا لطبيعة الكمبيوتر ، لا يمكن عرض ما يصل إلى ما لا نهاية ، لذلك سنضع حدا. تؤثر هذه القيمة أيضا على دقة المخزن المؤقت Z ، لذلك لا يوصى بتضمينها في منطقة الرسم خارج النطاق الذي لا يحتاج إلى عرضه.
يتم تحويل الكائن المحول للمنظور إلى مساحة مثل تلك الموجودة أدناه. يتم تكبير الكائنات التي كانت قريبة من الكاميرا، ويتم تصغير الكائنات التي كانت بعيدة.
هذا موضح في رسم تخطيطي سهل الفهم أدناه.
إذا نظرت إليها بالفعل من وجهة نظر الكاميرا ، فستبدو أدناه.
طريقة أخرى للتحويل الإسقاطي هي الإسقاط الإملائي ، الذي يعرض منطقة مرئية مثل تلك الموجودة أدناه. نظرا لأن العرض والارتفاع ثابتان بغض النظر عن العمق ، فإن حجم الكائن لا يتغير مع العمق.
نظام إحداثيات الشاشة
بعد تحويل الإسقاط ، يتم تحويله إلى إحداثيات الشاشة الفعلية. على الرغم من أنها شاشة ، يتغير موضع ونطاق العرض اعتمادا على إعدادات إطار العرض المعينة على الجهاز. ومع ذلك ، في حالة الألعاب ، غالبا ما تكون إحداثيات العميل للنافذة هي إطار العرض كما هو ، لذلك لا أعتقد أنك بحاجة إلى القلق كثيرا.
يتم تحويل إحداثيات الشاشة (0 ، 0) من إحداثيات الإسقاط (-1 ، 1 ، z). وبالمثل ، يتم تحويل إحداثيات الشاشة (العرض والارتفاع) من إحداثيات الإسقاط (1 ، -1 ، z).