كيف أنا تقريبا في الوقت الحقيقي مسارات السباق في عام 1997

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

قبل التاريخ


كانت آخر 4 سنوات من الدراسة في مدرسة أومسك للتربية البدنية ، حيث تم تعليم الطفل (باستثناء التربية البدنية وأقسم) لغة C ، والتي أتاحت لي ، بالتداخل مع الاهتمام بالرسومات في الألعاب ، أن أكتب شيئًا بنفسي ، محاولًا إدراك ما رأيته في ألعاب ذلك الوقت. . كان من الصعب بالفعل مفاجأة الرسومات ثنائية الأبعاد ، لكن وضع Wolf 3D وضعي في حالة توقف تام لفترة من الوقت. قال أحد الرفاق البارزين "نعم ، كل شيء على القضبان" ، وهذا سمح لي بالرحيل عن الأرض. ثم أدركت أنه يمكن تطبيق خوارزمية Bresenham لتوسيع نطاق عمود الصورة وبدأ نوع من المحاكاة الساخرة على Wolf3D في العمل. لم أكن أبذل قصارى جهدي لإيجاد شيء يمكن لعبه (يا له من شذوذ!) ، لقد أحببت عملية تنفيذ الخوارزميات الرسومية ، والشعور بأنك تعرف كيف يتم ذلك ويمكن أن تفعله. في الامتحانات النهائية ، اخترت أخذ المعلوماتية وعرض الجزء "النظري" للمعلمين ، فوجئت بهم كثيرا بوجود جزء عملي. لكن قبل أسبوع من الامتحان ، رأيت Descent - لعبة حقيقية ثلاثية الأبعاد بأنسجة. لقد كان شيئًا مستحيلًا ، كنت أعرف أن هناك 3DS ، ولكن هناك حاجة إلى تقديم رسوم متحركة كثيرًا من الوقت ، ثم طارت أمام أعيننا.

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

كنت ماهرة في الهندسة


الآن يمكنك العثور على أي معلومات في 5 دقائق ، ولكن ماذا تفعل بعد ذلك؟ كان لدي كتب على رسومات ثلاثية الأبعاد ، لكنها لم توضح السؤال على الإطلاق. في "Duma" ، يتم تشغيل جميع الوجوه على الشاشة في شكل شبه منحرف ، ويتم سحب النسيج عن طريق مد الأعمدة. لكن في الوقت نفسه ، فقدت البصر عن حقيقة أن اللامركزية تنشأ أفقياً ، وفي الواقع فإن الصورة في الدوما ليست واقعية تمامًا. فاتني المبدأ الرئيسي للرسومات ثلاثية الأبعاد ، التي اكتشفها نيوتن - " الخطي ". ما سيصبح مصدر جميع المشاكل واللاحقة.

نظرًا لأننا نعرف بالفعل كيفية رسم شبه منحرف ، فلن "نرسم" على الشاشة كل جانب مثلثي. نعم ، لا يمكن دهنها بأعمدة ، لكن الهندسة ليست بالأمر الصعب للغاية ، فلنمرر شعاعًا من الكاميرا عبر كل بكسل من الشاشة ونجد أين تتقاطع مع الوجه. هذا هو عمليا تتبع الأشعة ، لايت فقط! أي طالب سوف يكتب هذه الصيغة في 5 دقائق. معادلة الخط:

 vecx=k(xs،ys،z0)=k vecS

حيث xs. ysهذه هي إحداثيات بكسل على الطائرة الشاشة ، z0هذه هي المسافة من الكاميرا إلى مستوى الشاشة (الكاميرا عند صفر من النظام المرجعي) ، ك- المعلمة
معادلة الطائرة:

( vecn، vecx)=D

حيث n أمر طبيعي ، يسهل العثور على المعلمة (وبالتالي الإحداثيات):

k= fracD( vecn، vecs)


حسنا ، كم هو سهل ، تعال إلى عالم ألم الانقسام. يطوى الكمبيوتر جيدًا ، ويتضاعف بشكل محتمل (ليس أكثر من إضافات وتحولات) ، لكن قسم ... على قسم بنتيوم استغرق 46 دورة على مدار الساعة. حتى لو كان من 320 إلى 200 ، حتى لو لم يكن أكثر من ذلك ، فأنت تحتاج إلى 3 ملايين مقياس لكل إطار. وهناك 100 فقط من القنب ، مما يعني أنه لا يمكنك الحصول على أسرع من 30 إطارًا في الثانية من حيث المبدأ. وإذا تم زيادة القرار بنسبة 2 مرات؟ 7 إطارا في الثانية؟ لكن الشاب المتحمس لم يكن محرجا.

حسنًا ، دعنا نقول أننا قمنا بحساب نقطة التقاطع مع الوجه ، ثم نحتاج إلى حل مشكلتين:

  1. حدد ما إذا كنت تريد رسم وجه في هذا البكسل ، أو إذا كان هناك وجه آخر يتداخل معه
  2. العثور على إحداثيات الملمس

فرز الشجرة


بالطبع ، كنت أعرف عن Z- العازلة. لكن صدقوني ، فإن 99٪ من الأشخاص الذين يعرفون Z-buffer يتخيلونها بشكل غير صحيح ، تمامًا كما كنت أتخيلها بشكل غير صحيح (سيكون هناك تفسير). على أي حال ، كنت أرغب في تجنب الحسابات غير الضرورية (الأقسام ثقيلة للغاية) ، لذلك قررت استخدام تقنية أخرى ، اقرأ في الكتاب - أشجار قسم الفضاء الثنائي ، فهي أيضًا أشجار BSP. لطالما أحببت الأشجار ، لطالما فتنتني طريقة الفرز بشجرة بسحرها ، وهنا كان تباينها - قمت بتصحيح الأخطاء لمدة 8 ساعات متواصلة ، لكني استطعت!

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

نسيج خلفية الغراء


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

نحن بحاجة إلى مؤامرة والآثار.


التقديم حصل ، وإن لم يكن سريعًا ، لكنه حصل! كنت قادرا على الرسومات ثلاثية الأبعاد! لكن ماذا سنعرض؟ نحتاج إلى نوع من الحبكة ، بعض الطرز ، نحتاج إلى نوع من الصوت.

ماشي أو المسافر؟ ذهب هذا المشاة ولا يسمح أن يشعر كل الجمال 3D ، بالتأكيد ذبابة! سيكون هناك نزول لدينا.

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

العدو؟ حسنًا ، لم أتمكن من صنع نماذج من الناس ، فعلت ... سيارة إسعاف طيران ، شبه مكعبة ، مالت زجاجها الأمامي قليلاً فقط. لكن الملمس المحفوظة.

الأصوات. بدأت أصوات التصوير الصوتي للقطات والانفجارات والبكاء التي حصلت عليها من آلة الطيران ، الصوتي الرجل الذي باع العالم - لقد استمعتُ إلى المعدن ، لكنني شعرت بالأسف على والديّ ، اللذين كان عليّ أن أستمع إلى نفس الشيء في الأمسيات أثناء تصحيح الأخطاء.
في نظام التشغيل Windows 95 ، لم تكن الأصوات مختلطة ، لكنها أخبرتني المعلمة من الجامعة عن التعددية العديدة ، وقد كتبت الخلاط في دفق منفصل - نجاح آخر (سيتم إصدار Windows 98 في عام ، حيث يتم خلط الأصوات نفسها وستصبح هذه المهارة السرية عديمة الفائدة).

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

تقريبا نهاية القصة


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

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

ملاحظة: إحداثيات نسيج Real تتغير بشكل غير خطي ، للسرعة التي يتم استبدالها بأخرى خطية. ولكن ما الذي يحدث للتنسيق Z ، ولماذا يقلبون Z أثناء التحول؟ يتم إعطاء الإجابة على هذا السؤال بواسطة Z- المخزن المؤقت.

Source: https://habr.com/ru/post/ar464045/


All Articles