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

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

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

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

ماذا تفعل؟ قراءة :)
في الواقع ، يمكننا أن نجعل الصور أعرض مما نحتاج إليه ، ونحذف فقط الفائض:

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

نحن فقط نصنع ما قبل التقديم ليس أسود بل أبيض ، اكتب الصورة اليسرى في القناة الحمراء والصورة اليمنى باللون الأزرق. تحصل على الصورة التالية:

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

على aliexpress ، كانوا أكوام ، مائة روبل قطعة. بالمقارنة مع النقش ، لا تحتاج إلى القيام بأي شيء على الإطلاق ، فقط التقاط صورتين وتكوينهما جنبًا إلى جنب ،
إليك الالتزام .

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

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

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

تم تصميم هذا الرسم المجسم "لتخفيف" العينين (الرسم المجسم على الجدار). بالنسبة لأولئك الذين يفضلون طريقة العرض العكسي ،
التقط صورة هنا . إذا لم تكن معتادًا على استخدام الصور المجسمة ، فجرّب ظروفًا مختلفة: صورة ملء الشاشة ، صورة صغيرة ، ضوء ساطع ، ظلام. المهمة تكمن في فتح عينيه بحيث يتزامن الشريطين الدورين المتجاورين. أسهل طريقة للتركيز على الجزء العلوي الأيسر هي إنها مسطحة. على سبيل المثال ، أنا محاط ببيئة الحبر ، أفتح الصورة بملء الشاشة. لا تنسى إزالة الفأرة منه!
لا تكون راضية عن تأثير 3D معيبة. إذا كنت على دراية غامضة فقط بالأشكال الدائرية في منتصف النقاط العشوائية جنبًا إلى جنب مع بعض الآثار ثلاثية الأبعاد باهتة ، فهذا بالطبع ، وهم غير مكتمل! إذا نظرت بشكل صحيح ، يجب أن تخرج الكرات بوضوح من مستوى الشاشة إلى العارض ، يجب أن يكون التأثير مستقرًا ويحافظ عليه نظرًا للدراسة المستمرة والمفصلة لكل جزء من الصورة ، في المقدمة والخلفية. لدى Stereopsis التباطؤ: بمجرد الحصول على صورة ثابتة ، يصبح أكثر وضوحًا كلما طالت نظرتك. كلما كانت الشاشة بعيدة عن الأعين ، زاد تأثير العمق.
تم رسم هذا الرسم المجسّم وفقًا للطريقة التي اقترحها ثيمبلي وآخرون منذ ربع قرن في مقالهم المعنون "
عرض صور ثلاثية الأبعاد: خوارزميات لصور مجسمة عشوائية أحادية الصورة ".
نقطة الانطلاق
نقطة الانطلاق لتقديم الصور المجسمة هي خريطة عمق (نسينا اللون).
فيما يلي التزام يجعل هذه الصورة:

يتم قطع الأعماق في تجسيدنا بواسطة الطائرات القريبة والبعيدة ، أي أن أبعد نقطة في خريطتي لها عمق 0 ، الأقرب.
المبدأ الأساسي
دع أعيننا تكون على مسافة د من الشاشة. ضع المستوى البعيد (التخيلي) (z = 0) على نفس المسافة خلف الشاشة. نختار ثابت μ ، والذي يحدد موقع الطائرة القريبة (z = 0): سيكون على مسافة μd من البعيدة. اخترت μ = 1/3 في الكود الخاص بي. توتال ، عالمنا كله يعيش على مسافة من d-μd إلى d وراء الشاشة. دعنا نحدد مسافة e محددة بين العينين (بالبكسل ، في الكود ، اخترت 400 بكسل).

إذا نظرنا إلى نقطة كائننا باللون الأحمر على الرسم التخطيطي ، فيجب أن يكون للبيكسلتين باللون الأخضر نفس اللون في الصورة المجسمة. كيفية العثور على المسافة بين هذه بكسل؟ بسيط جدا إذا كانت النقطة الحالية المسقطة لها عمق z ، فإن نسبة المنظر إلى المسافة بين العينين تساوي نسبة العمق المقابل: p / e = (d-dμz) / (2d-dμz). بالمناسبة ، لاحظ أن d يتقلص ولا يشارك في أي مكان آخر! بمعنى ، p / e = (1-μz) / (2-μz) ، مما يعني أن المنظر يساوي p = e * (1-μz) / (2-μz) بكسل.
هذا هو المبدأ الأساسي لبناء صورة مجسمة: نحن نذهب إلى خريطة العمق بأكملها ، ولكل قيمة عمق نحدد البيكسلات التي ينبغي أن يكون لها نفس اللون ، ونكتب هذا في نظامنا للقيود. ثم نبدأ من صورة عشوائية ، ونحاول الوفاء بجميع القيود المفروضة مسبقًا.
تحضير الصورة الأصلية
في هذه المرحلة ، سنقوم بإعداد صورة سنفرض عليها لاحقًا قيود المنظر.
هنا ، أخذ الالتزام ، يرسم هذه الصورة:

لاحظ أن الألوان عمومًا عشوائية تمامًا ، إلا أنني وضعت rand () * sin في القناة الحمراء لتوفير موجات دورية. تصنع هذه الموجات بمسافة 200 بكسل ، وهذا (مع تحديد μ = 1/3 و e = 400) هو الحد الأقصى لقيمة المنظر في عالمنا ، بل هو أيضًا مستوى بعيد. هذه الموجات اختيارية ، لكنها ستسهل التركيز الضروري للرؤية.
تقديم صورة مجسمة
في الواقع ، يبدو الكود الكامل المتعلق بالصور المجسم كما يلي:
int parallax(const float z) { const float eye_separation = 400.;
إذا كان أي شيء ، ثم
ارتكاب هنا . تعطي الدالة int parallax (const float z) المسافة بين البكسل من نفس اللون لقيمة العمق الحالية. نجعل الخط المجسّم سطراً سطراً ، لأن الخطوط مستقلة عن بعضها البعض (ليس لدينا نظير رأسي). لذلك ، فإن الحلقة الرئيسية تعمل ببساطة عبر كل الخطوط. بالنسبة لكل منهم ، نبدأ بمجموعة كاملة غير محدودة من البكسلات ، والتي سنقوم بعدها بفرض قيود المساواة الزوجية ، وفي النهاية سيكون لدينا عدد معين من مجموعات البكسل (غير المتصلة) من نفس اللون. على سبيل المثال ، يجب أن تكون البيكسلات ذات الفهرس يسارًا والبيكسلات ذات الفهرس الأيمن هي نفسها.
كيفية تخزين هذه المجموعة من القيود؟ أبسط إجابة هي
الاتحاد - إيجاد بنية البيانات . لن أصف ذلك ، فهذه ثلاثة سطور فقط من الكود ، يمكنك قراءتها على ويكيبيديا. الفكرة الأساسية هي أنه بالنسبة لكل مجموعة ، سيكون لدينا "مسؤول" معين عنها ، بل هو أيضًا بكسل للجذر ، وسنتركه بنفس اللون كما كان في الصورة الأصلية ، وسنعيد رسم جميع وحدات البكسل الأخرى في المجموعة:
for (size_t i=0; i<width; i++) {
الخاتمة
حسنا ، في الواقع ، هذا كل شيء. عشرون سطرًا من الشفرة - وصورة مجسمة لدينا جاهزة ، وكسر عينيك ورؤوسك ، وارسم الصور! بالمناسبة ، الألوان العشوائية فقط في صورة مجسمة هي عمومًا رفاهية ، من حيث المبدأ ، إذا حاولت ، يمكنك أيضًا نقل لون صورتنا جزئيًا.
نظم عرض الاستريو الأخرى ، على سبيل المثال ،
المتعلقة بالاستقطاب ، خرجت من المناقشة ، لأنها تتجاوز ميزانية مائة روبل. إذا فاتك شيء ما ، أضفه وصححه!