iPhone OpenGL ES: تطبيق اختبار عمق على القوام التي لديها بكسل شفافة لعبة 2D

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

سؤال

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

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

المحلول

لا هذا ليس مستحيل. هذا صحيح بجميع اختبار عمق الأجهزة.

GL (كامل أو ES - و D3D) جميعها نفس النموذج - يرسمون بالترتيب الذي تحدد المضلعات. إذا قمت بسحب المضلع أ

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

في الألعاب ثلاثية الأبعاد BSPs هي الحل الأساسي لهذه المشكلة.

نصائح أخرى

glEnable( GL_ALPHA_TEST );
glAlphaFunc( GL_EQUAL, 1.0f );

سيؤهل هذا كل بكسل مع ألفا من أي شيء آخر غير المعبأ بالكامل. هذه البكسل، إذن، لا يتم تقديمها إلى Z-Buffer. ومع ذلك، فإن هذا يؤثر على تحسينات خط أنابيب المخزن المؤقت Z-Buffer حتى قد يسبب بعض التباطؤ الخطير. فقط استخدامه إذا كنت حقا لديك أيضا.

إذا كنت تستخدم التظليل، فيمكنك تجربة تعطيل مزج وتجاهل البكسل مع ألفا 0

if(texColor.w == 0.0)
    discard;

ما نوع المزج الذي تستخدمه؟

glEnable(GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

يجب أن يمنع أي شظايا مع ألفا من 0 من الكتابة إلى المخزن المؤقت عمق.

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