كيف يمكنني استخدام كائنات المخزن المؤقت Vertex لتقديم العديد من الدوائر المختلفة؟

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

  •  18-09-2019
  •  | 
  •  

سؤال

أحاول كتابة لعبة تتعامل مع العديد من الدوائر (جيدا، مشجعي مثلث، لكنك تحصل على الفكرة). سيكون لكل دائرة موقف X، وضع AY، وممتلكات جماعية. ستكون الممتلكات الجماعية لكل دائرة مختلفة. وأيضا، أريد تلوين بعض مجموعات الدوائر مختلفة، مع الحفاظ على مركز دائري شفافة، ويتلاشى إلى غامضة على طول محيط الدوائر.

قيل لي لاستخدام VBOS، وكانت googling طوال اليوم. أود أن أكون مثالا كاملا حول كيفية رسم هذه الدوائر وتفسيرا لكيفية عمل VBOS، مع الحفاظ على هذا التفسير بسيطا.

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

المحلول

لم أقم بتنفيذ VBOS بنفسي بعد، ولكن من ما أفهمه، فإنها تعمل مماثلة لأجسام الملمس. في الواقع، عندما أذكر نفسي وشرح للآخرين ما هي VBOS، أحب أن بشكل غير صحيح استدعاء كائنات الملمس "كائنات المخزن المؤقت الملمس"، لتعزيز التشابه المفاهيمي.

(لا أن تكون مختلطة مع القوام العازلة من تمديد NVIDIA المحدد gl_ext_texture_buffer_object..)

لذلك دعونا نفكر: ما هي كائنات الملمس؟ إنها كائنات تولدها باستخدام glGenTextures(). glGenBuffersARB() هل شيء مماثل. ينطبق القياس glBindTexture() و glBindBufferARB().

(اعتبارا من OpenGL 1.5، وظائف glGenBuffers() و glBindBuffer() دخلت Core OpenGL، حتى تتمكن من استخدامها بدلا من تعادل التمديد.)

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

VBOS تخدم غرضا مشابها. بدلا من إرسال صفيف Vertex مرارا وتكرارا، يمكنك تحميل الصفيف بمجرد استخدام glBufferData() ثم أرسل فقط "اسم OpenGL" للكائن. إنها رائعة للأشياء الثابتة، وليس كبيرة جدا بالنسبة للأشياء الديناميكية. في الواقع، توفر لك العديد من محركات 3D 3D مثل OGRE3D طريقة لتحديد ما إذا كانت شبكة ديناميكية أو ثابتة، ربما من أجل السماح لك بالتحديد بين صفيف VBOS و Vertex.

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

إليك "صفحة رجل" جيدة جدا "MAN" من NVIDIA حول VBO API. وبعد اقرأها لمزيد من المعلومات!

نصائح أخرى

جيد vbo التعليمي

ما تفعله يشبه الجسيمات، قد ترغب في جوجل "تقديم الجسيمات" فقط في حالة.

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