Direct3D: ارسم مكعبًا محكمًا مع استدعاء محددات DrawIndExedPrimitives. ممكن؟

StackOverflow https://stackoverflow.com/questions/2355714

سؤال

أحاول رسم مكعب محكم باستخدام 8 رؤوس فقط وواحدة DrawIndexedPrimitives يتصل. هل هذا ممكن؟

أواجه مشاكل مع إحداثيات الأشعة فوق البنفسجية. أجد أنه من المستحيل التوصل إلى قيم الأشعة فوق البنفسجية المناسبة التي ستعمل لجميع وجوه المكعب.

خذ الترقيم التالي كمثال:

Cube with UV Values

تم تعيين الأشعة فوق البنفسجية على (0 ، 0) لـ Vertex A. لجميع القمم عكسًا قطريًا (على جميع الوجوه الثلاثة التي تشارك A as a vertex) ، أقوم بإعداد الأشعة فوق البنفسجية إلى (1 ، 1). الآن ، فإن الوجوه الثلاثة التي لا تحتوي على قمة قمة في نهاية المطاف لها رؤوستين لكل منهما قيمة UV (1 ، 1). أفهم أن هذا لا ينبغي أن يكون كذلك.

إذن ما هو الحل؟

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

المحلول

ليس من الممكن إذا كان لدى قمة واحدة إحداثيات UV متعددة.

للتغلب على هذه المشكلة ، قم بتكرار موضع Vertex وتعيين كل نسخة من إحداثيات UV فريدة من نوعها. سيؤدي ذلك إلى زيادة عدد القمم إلى 24 لمكعب في أسوأ الحالات (أربعة لكل جانب).

هذا هو ما يفعله الجميع بغض النظر عما إذا كان يستخدم OpenGL أو DirectX. بالنسبة إلى المكعب ، قد يبدو هذا وكأنه الكثير من الذاكرة المهدرة ، ولكن في الممارسة العملية - مع نماذج العالم الحقيقي - فإن كمية تكرار قمة الرأس ليست عالية.

بعد ذلك ، يمكنك رسم المكعب مع مكالمة واحدة إلى DrawindExedPrimitive.

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