برنامج OpenGL:طريقة فعالة لتقديم مجموعة من الهندسة؟

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

  •  20-08-2019
  •  | 
  •  

سؤال

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

لقد سمعت عن وضع عدة كائنات في VBO واحد لتقليل استدعاءات openGL، لكن لم أر مثالًا مناسبًا لكيفية القيام بذلك.لقد رأيت أيضًا منشورات تتعارض مع هذه الفكرة.لذا، في الوقت الحالي، أنا في الغالب في حيرة من أمري.

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

المحلول

أولاً ، ربما يجب أن تستخدم VBO طوال الوقت. للأشياء الصغيرة والكبيرة.

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

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

"مثلث الانحطاط" هو مثلث يحتوي على مؤشرتين أو ثلاثة مؤشرات قمة متطابقة. يمكن لأجهزة الرسومات التعرف عليها وتخطيها بسرعة كبيرة.

لذلك إذا كان لديك ، على سبيل المثال شريطان مع مثلث واحد لكل منهما ، ليصبح المجموع ستة رؤوس.

ستكون مؤشرات المثلث الأصلي للشرائط:

1) 0, 1, 2
2) 0, 1, 2

الآن تنضم إلى جميع القمم معًا ، لذلك ينتهي بك الأمر بـ 6 رؤوس.

1) 0, 1, 2 (unchanged)
2) 3, 4, 5

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

1) 0, 1, 2, 2, 2, 3, 4, 5

(أعتقد أن ما سبق صحيح ، لكن لم يتم التحقق منه بالفعل)

الفكرة هي: مع الشريط أعلاه ، ستقوم بطاقة الرسومات بإخراج مثلثات هذه القمم:

0, 1, 2
1, 2, 2 <- degenerate! won't be drawn
2, 2, 2 <- degenerate! won't be drawn
2, 2, 3 <- degenerate! won't be drawn
3, 4, 5

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

نصائح أخرى

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

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