برنامج OpenGL تطوير لعبة الكواليس التي تمتد بعيدا في عرض

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

  •  07-07-2019
  •  | 
  •  

سؤال

أنا أعمل على لعبة 2d.تخيل XY و أنت شخصية.الطابع الخاص بك يمشي بقية المشهد يأتي في طريقة العرض.

تخيل أن XY هو كبير جدا وهناك شخصيات أخرى خارج العرض الحالي.

هنا هو سؤالي مع برنامج opengl ، إذا كانت هذه الكائنات ليست المقدمة خارج العرض الحالي لا يأكلون المعالجة الوقت ؟

أيضا ، ما هي بعض الأساليب لتجنب وجود أجزاء من المشهد المقدمة التي ليست في الرأي.إذا كان لدي المكعب الذي هو 1000 وحدة بعيدا عن موقفي الحالي ، أنا لا أريد أن الكائن المقدمة.كيف يمكن أن يكون opengl لا تجعل ذلك.

أعتقد أسهل النهج هو لحساب الموقف ثم لا يوجه هذا المكعب/الكائن إذا كان بعيدا جدا.

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

المحلول

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

إذا كنت تنظيم الأشياء الخاصة بك في التسلسل الهرمي معقولة ثم هل يمكن اعدام قطاعات واسعة من المشهد مع الاختيار مربع واحد فقط.

نصائح أخرى

برنامج OpenGL التعليمات على "لقطة، الذبح واختبار الرؤية" يقول هذا:

<اقتباس فقرة>   

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

والمضي قدما في قراءة بقية هذا الارتباط، كل شيء ذات الصلة.

عادة التطبيق الخاص بك يجب أن تؤدي هذه أمثلية - OpenGL هو حرفيا مجرد تقديم جزء لا أداء إدارة كائن أو شيء من هذا القبيل.إذا كنت تمر في بيانات شيء غير مرئي فإنه لا يزال لديه لتحويل ذات الصلة الإحداثيات في الفضاء قبل أن تحدد تماما قبالة الشاشة أو أبعد من مقطع الطائرات.

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

من الواضح في لعبة معقدة لن تريد أن تفعل هذا من أجل كل كائن صغير, لذلك فمن المعتاد أن مجموعة منهم ، إما بشكل هرمي (على سبيل المثال.لن تجعل بندقية إذا كنت قد قررت أن كنت لا يجعل الحرف الذي يحمل عليه) ، مكانيا (على سبيل المثال.تقسيم العالم إلى الشبكة/quadtree/octree ورفض أي كائن أن تعرف حدود المنطقة التي كنت قد قررت بالفعل حاليا غير مرئية) أو أكثر عادة مزيج من الاثنين معا.

و"هذه الخطوة الفوز فقط لا للعب"

وكل glVertex الخ سوف يتم أداء ضرب بغض النظر عن ما إذا كان في نهاية المطاف يحصل المقدمة على الشاشة. السبيل الوحيد للالتفاف حول ذلك هو ليس رسم (أي ذبح) الأشياء التي متعود من أي وقت مضى أن يصدر على أي حال.

والأسلوب الأكثر شيوعا هو أن يكون هناك المخروط الناقص عرض وربط الكاميرا. الزوجين أن مع octtree أو <وأ href = "http://en.wikipedia.org / ويكي / quadtree "يختلط =" نوفولو noreferrer "> quadtree اعتمادا على ما إذا اللعبة هو 3d / 2d لذلك أنت لا تحتاج إلى التحقق من كل كائن لعبة واحد ضد المخروط الناقص.

والسائق الكامنة <م> قد القيام ببعض اعدام وراء الكواليس، ولكن لا يمكن أن تعتمد على أن لأنها ليست جزءا من القياسي OpenGL. ربما سائق جهاز الكمبيوتر الخاص بك يفعل ذلك، ولكن ربما شخص آخر (الذي قد يرشح نفسه لعبتك) لا. فمن الأفضل لك القيام به لاعدام الخاص بك.

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