سؤال

أنا أقوم بإنشاء عارض HTML5 Canvas 3D 3D، وأقول لقد حصلت على أبعد من ذلك دون مساعدة من ذلك، لكنني أجري في عرض فرز. أحاول تنفيذ عمليات إعادة الاتصال على مكعب بمساعدة بعض الحسابات الطبيعية. أيضا، لقد وصفت بهذا webgl، لأن هذا سؤال عام كافي يمكن أن ينطبق على كلا من حالات الاستخدام الخاصة بي وواحد تسريع ثلاثي الأبعاد.

على أي حال، لأنني أدوير المكعب، لقد وجدت أن الوجوه الخاطئة مخفية. مثال:

خلفية الإعدام مشكلة في مكعب

أنا أستخدم القمم التالية: https://developer.mozilla.org/en/webgl/creating_3d_objects_using_webgl#define_the_positions_of_the_cube٪ 27s_vertices

الإجراء العام الذي أستخدمه هو:

  1. إنشاء مصفوفة تحويل لتحويل رؤوس المكعب

  2. لكل وجه، ولكل نقطة على كل وجه، أقوم بتحويل هذه إلى VEC3S، وقد اضربهم من قبل المصفوفة المصنوعة في الخطوة 1.

  3. ، ثم أحصل على سطح عادي الوجه باستخدام طريقة NEWELL، ثم احصل على منتج DOT من هذا العادي وبعض VEC3، على سبيل المثال، [-1، 1، 1]، لأنني لم أستطع " تفكر في قيمة جيدة لوضع هنا. لقد رأيت بعض الأشخاص يستخدمون موقف الكاميرا لهذا، ولكن ...

  4. تخطي الخطوة المعتادة لاستخدام مصفوفة الكاميرا، أسحب قيم x و y من المتجهات الناتجة لإرسالها إلى خطي ووجه العملاء العارضين، ولكن فقط إذا كان لديهم منتج نقطة أعلاه 0. أدرك إنه تعسفي إلى حد ما الذي أسحبه حقا.

  5. أنا أتساءل شيئين؛ إذا كان الإجراء الخاص بي في الخطوة 3 صحيحة (على الأرجح ليس)، وإذا كان ترتيب النقاط التي أرسمها على الوجوه غير صحيحة (من المحتمل جدا). إذا كان الأخير صحيحا، فأنا لست متأكدا تماما عن كيفية تصور المشكلة. لقد رأيت الناس يقولون أن الحياة الطبيعية ليست ذات صلة، وهو الاتجاه الذي يجري رسم الخط، ولكن ... من الصعب أن تلتف على رأسي حول ذلك، أو إذا كان هذا هو مصدر مشكلتي.

    ربما لا يهم، ولكن مكتبة مصفوفة أستخدمها هي Matrix GL-Matrix:

    href="https://github.com/toji/gl-matrix" rel="nofollow noreferrer"> https://github.com/toji/gl-matrix

    أيضا، ملف معين في CodeBase مفتوح المصدر الذي أستخدمه هنا:

    href="http://code.google.com/p/nanoblok/source/browse/nb11/app/render.js" rel="nofollow noreferrer"> http://code.google.com /P/NANOBLOK/Source/Browse/nb11/App/Render.js

    شكرا مقدما!

هل كانت مفيدة؟

المحلول

لم أستعرض نظامك بأكمله، ولكن لا ينبغي أن يكون "VEC3" التعسفي؛ يجب أن يكون ناقلات "الخروج من الشاشة"، والتي (نظرا لأن الإسقاط الخاص بك هو ⟨ x ، y ، z ⟩ → ⟨ x ، y ⟩) إما ⟨0، 0، -1⟩ أو ⟨0، 0، 1⟩ اعتمادا على ماكينة نظام الإحداثيات وحواس الشاشة. ليس لديك "مصفوفة الكاميرا" واضحة (عادة ما يطلق عليها مصفوفة عرض)، ولكن الكاميرا الخاصة بك (عرض وإسقاط) محددة ضمنيا من قبل إسقاط الخطوة 4!

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top