سؤال

وأستخدمه Direct3D لعرض عدد من I-أقسام المستخدمة في البناء الصلب. يمكن أن يكون هناك مئات الحالات من هذه I-أقسام في جميع أنحاء مسرح بلدي.

ويمكن أن أفعل هذا بطريقتين:

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

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

هل هناك حل أفضل؟ هل هناك طريقة لإيقاف backface اعدام فقط المكالمات معينة من DrawIndexedPrimitives؟ وأود أيضا إجابة منصة محايدة لذلك، إذا كان هناك واحد.

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

المحلول

أولا، لم يقم backface اعدام أي علاقة مع الترتيب الذي يتم تقديم الكائنات. بخلاف ذلك، كنت اذهب لنهج B لا لسبب معين غير أنه ربما سوف تبدو أفضل. أيضا هذا الكائن ربما ليس أكثر من جهة كاملة من مثلثات. وجود المئات في مشهد لا ينبغي أن تكون هذه القضية. إذا كان كذلك، حاول البحث في التوضيح الأجهزة.

نصائح أخرى

في برنامج OpenGL يمكنك التبديل من backface اعدام لكل مثلث ترسمه:

glEnable(GL_CULL_FACE);
glCullFace(GL_FRONT);
// or
glCullFace(GL_BACK);

وأعتقد أن شيئا من هذا القبيل هو ممكن أيضا في Direct3D

وإذا كان لديك I-أقسام لا تتغير في كثير من الأحيان، وتحميل كل المقاطع في المخزن واحدة قنة / مؤشر كبير ورسم لهم مكالمة واحدة. هذه هي الطريقة الأكثر performant للرسم الأشياء، وسوف بطاقة الرسومات القيام بعمل سريع حتى لو كنت تدفع نصف مليون مثلث لذلك.

نعم، هذا يتطلب أن تكرار البيانات قمة الرأس لجميع الفروع، ولكن هذه هي الطريقة التي يقصد D3D9 لاستخدامها.

واود ان اذهب مع A ك المسافة التي سيتم رؤية B من سيكون مضيعة للقوة المعالجة لرسم كل هذه المثلثات المنحطة.

وأيضا أود ببساطة اطلاق النار عليهم في عازلة ض ونسمح بأن فرز ذلك كله.

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

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