المؤسسات: تمثيل الفضاء الثلاثي الأبعاد

وقبل أن يُرسم جهاز واحد من أجهزة الحفر، يجب أن يكون للمحرك 3D لغة رياضية لوصف الأجسام الموجودة في الفضاء، وفي الجوهر مُصَوِّر ] (ثلاثة أغطية شاملة تمثل الموقع أو التوجيه أو اللون) و] مقاييس ] (44 صفائف محددة كتحولات).

  • للنقاط والناقطات.
  • for transformation matrices stored in column-major order.

ويتكون كل شيء من ] المثلثات .() ويحدّد المثلث بثلاثة فقرات، كل منها في موقع، وبوضع طبيعي ولون اختياري، ويُعتبر تخزينها صفائف متاخمة (مثلاً، ] للمكعب، ويحسّن الكفاءة من حيث الاختبار عندما تجهز لاحقاً آلاف الوجوه لكل إطار.

خط الـ "جرافيز" من "فيرتيك" إلى "بيكسل"

خط خط سيري هو سلسلة من المراحل التي تحول بيانات موقع 3D إلى صورة 2D في محرك أساسي مزود بالبرمجيات، تقومون بتنفيذ كل مرحلة يدوياً المراحل الرئيسية هي:

  1. Vertex Processing] - تطبيق النماذج والمنظر والتحوّلات الإسقاطية.
  2. Rasterization] — converting transformed triangles into fragments (potential pixels).
  3. Shading] — computing the color of each fragment based on lighting and material.
  4. Output Merging] - blending fragments with the frame buffer, including depth testing.

وتؤدي محركات محركات مجهزة بالموجات الصلبة (تستخدم نظام " أوفغل " أو " أو " أو " مباشرة " ) معظم هذه الخطوات على وحدة التخطيط العام، ولكن فهم مسار البرمجيات يعطيك نظرة عميقة على كيفية عمل وحدة الخدمات العامة في ظل غطاء الرأس.

تجهيز البيانات وتحويلها

(أ) [يبدأ كل من اللافيكس في [(FLT:0]) حيز نموذجي [(FLT:1]) (إحداثيات محلية تتعلق بال الجسم) (يضعها في العالم، وتطبق مصفوفة نموذجية ترمز إلى الترجمة والتناوب والتوسع.

في جيم، وظائف التحول تبدو كما يلي:

  • - يعيد مصفوفة الهوية.
  • - يبني مصفوفة ترجمة.
  • - التناوب حول المحور X.
  • - تعدد المصفوفة 4×4 بواسطة ناقل من أربعة عناصر (إحداثيات متجانسة).

ويُعادل مكافئ اللافيكس في البرمجيات جميع الفظائع، ويُعد كل منها بمصفوفة ] مجتمعة، ويخزن النتيجة التي تُحدث تحولاً في عازلة اللافقار.

الإسقاط: المنظور مقابل الأورثوغرافي

(ب) مراقبة الإسقاطات لعمق تمثيلها على الشاشة. الإسقاطات المنظورية تجعل الأجسام البعيدة تبدو أصغر، مما يخلق الواقعية، وتبنى مصفوفة من مجال النظر، ونسبة الجانب، والطائرات المتقشفة القريبة والبعيدة، والصيغة الكلاسيكية تتضمن تقسيم العناصر X والي حسب الز (بعد المضاعفة المصفوفة).

  • - يعيد مصفوفة منظورية موحدة.

Orthographic projection] preserves parallel lines and is simpler, used for UI or CAD tools. It does not involve perspective divide.

الترميز: المثلثات المطلية

بعد الإسقاط، لديك إحداثيات شاشة 2D (مثل مواقع البكسل) وقيمة عمق (ض) وتكسر التقويم كل مثلث إلى شظايا تغطي إحداثيات بيكسل البخار، والخريزم الكلاسيكي هو [(FLT:0]]) التحويل الكانلي :

  1. Sort the triangle’s three vertices by y-coordinate.
  2. امشوا في الحواف اليسرى واليمين، وحساب الحدود x لكل مسحة.
  3. وبالنسبة لكل كيسل في الصفة الأفقية، يحسب عمق الشظية عن طريق الاستقطاب عبر المثلث.
  4. إجراء اختبار متعمق : مقارنة z الشظايا بالقيمة الموجودة بالفعل في عازل العمق، وإذا كان أقرب، استكمال الحاجز العميق وضبط لون الشظية.

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

التقاسم والإضاءة

ويستخدم محرك بسيط مسطح لون واحد لكل مثلث، محسوباً من الوجه العادي ومصدر خفيف واحد.() ويعطي النموذج اللامبرتي ] كثافة انتشارية: في C، تصنفين كثافة طبيعية كمنتج متداخل لطرفين مثلثين (بعد تحويل الألوان إلى الفضاء العالمي)، ثم تضاعفين.

To add depth, implement Gouraud shading (vertex normals, interpolated across fragments) or ]Phong shading (per-pixel normals) The latter requires interpolating world positions and normals, then computing lighting per fragment -more expensive but dramatically expensive.

بناء المحرك في جيم: الخطوات العملية

فلنمشي من خلال بناء محرك برمجيات دنيا من الصفر، هدفه جعل مكعب دوار مضاءة مرنة وبثها على نافذة من طراز 640 x480 بيكسل.

الخطوة الأولى - وضع بيكسيل بافيير

Define a memory buffer for the frame and depth: and . Clear the framebuffer to black and the depth buffer to 1.0 (far plane) each frame.

الخطوة 2 - تعريف بيانات المشهد

وبالنسبة للمكيبة، تحتاج ستة وجوه (12 مثلث) إلى 12x3 = 36 حرف، وخزنها في مجموعة من الخنادق ذات الموقع (3 عوامة) واللون (3 عوامات لـ RGB) قبل تحديد الزاوية الـ 8 الفريدة من نوعها و 6 ألوان وجه، واستخدام الرقم القياسي لقطعة التحلل لتجنب تكرار الفعل.

الخطوة 3 - خط الأنابيب التحويلية

(أ) ترجمة: ترجمة: ترجمة:

الخطوة 4 - التطرف والتقاسم

لكل مثلث، استخدم طريقة المسح الضوئي، بينما تمشي البيكسلزات، وتحقق العمق، وتضع أيضاً سمة منحرفة منحرفة مثل موقع الفضاء العالمي (لـ(فونغ) أو اللافتية الطبيعية (لغوراد) وتطبق معادلة الانتشار اللامبرتي، وتكتب اللون النهائي إلى المصفوف إذا ما انقلبت اختبارات العمق.

الخطوة 5 - التلاعب

Use SDL (Simple DirectMedia Layer) or a similar library to create a window and blit the framebuffer. for example, with SDL2: , , in , then and

هذا المسار البرمجي يسير على وحدة البرامجيات لذا الأداء يقتصر على بضعة آلاف من المثلثات لكل إطار، وحالما ترتاح، يمكنك استبدال طبقة التستر بشبكة (إف إن جي إل)، وإخراج العمل الثقيل إلى وحدة الخدمات العامة، مع الحفاظ على منطق التحول والمشهد في (جيم).

أفضّل محركك

المحرك الأساسي بطيء، العديد من التعظيمات ضرورية لأداء الوقت الحقيقي:

  • Back-face culling:] Skip triangles whose normals point away from the camera. Compute the signed area of the projected triangle (in 2D) or check the dot product of the face normal with the view direction.
  • Frustum culling:] Test the bounding box of an object against the six planes of the view frustum. If completely outside, leave the entire object.
  • Fixed-point arithmetic:] replacementing-point operations with integer math in tight rasterization cycles. Many motor builders use 16 fixed-point for scanline interpolation.
  • Pre-transform cache:] Avoid transforming the same vertex multiple times by transforming all vertices of a mesh once, then using indices.
  • Blocked frame buffer writes:] Write pixels in memory-order (left to-right, top-to-bottom) to maximize cache hits.

ويمكن لهذه التقنيات أن تدفع جهاز برمجيات من ٣ إلى ٥ فبزوتر إلى ٦٠ فبرة في شكل مشاهد ذات تعقيدات متوسطة )مثل بضع مئات من المثلثات(.

توسيع المحرك

بمجرد وجود مؤسسة صلبة، يمكنك إضافة الملامح بشكل تدريجي:

  • Texture mapping:] Store 2D images and interpolate UV coordinates across triangles. Implement bilinear filtering for smooth results.
  • Advanced shading:] Add specular highlights (Blinn-Phong), ambient occlusion, or even shadow maps.
  • Scene management:] Use an octree or BSP tree to quickly determine which objects are visible.
  • User interaction:] Handle keyboard and mouse input to around the camera or pick objects.
  • Pipeline abstraction:] Design a shader system: define vertex and fragment functions as function pointers, enabling flexible rendering without recompilation.

الموارد والقراءة الإضافية

لتعميق فهمك، استكشاف النصوص التقليدية والأوراق الدراسية الإلكترونية التي ألهمت هذا المحرك:

  • Scratchapixel] - تفسيرات متعمقة لتعقب الأشعة والتعقيم والرياضيات.
  • LearnOpenGL] - التعليمات الحديثة المفتوحة GL؛ بدء فصل " مثلث الهيلو " .
  • Wikipedia: 3D Projection] - الرياضيات الرسمية وراء المنظور و مصفوفات الرياضيات.

بناء محرك ثلاثي الأبعاد في سي هو طقوس مرور لمبرمجي الرسوم البيانية، إنه يعلمك ليس فقط كيفية كتابة الرموز الفعالة، بل أيضا كيف تفكر بثلاثة أبعاد وتتكون من نظم للأداء - الحرجة، تبدأ بمكعب واحد متناوب، ثم تضيف المزيد من المثلثات والمنسوجات، وأخيراً تسلمها إلى وحدة التصوير العالمي، والرحلة من خام C إلى محرك كامل التشغيل تكشف عن السحر وراء كل شاشة.