سؤال

لقد قمت بتنفيذ تحويل YUV إلى RGB عبر تظليل جزء مكتوب بلغة تظليل Nvidia.(يتم تخزين Y وU وV في مواد منفصلة يتم دمجها عبر التركيب المتعدد في تظليل الأجزاء الخاص بي).إنه يعمل بشكل رائع في ظل OpenGL، لكن في ظل Direct3D لا أستطيع جعل الصورة الناتجة تبدو صحيحة.بدأت أشك في أن Direct3D يقوم بطريقة ما بتعديل عينات Y وU وV قبل أن تتاح لي الفرصة للقيام بعملية تحويل YUV.هل يعرف أحد ما إذا كان Direct3D يقوم بإجراء أي تعديلات على القيم المخزنة في الأنسجة قبل تشغيل تظليل الأجزاء وكيفية تعطيلها>؟

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

المحلول

لقد اكتشفنا ذلك.:) كانت المشكلة في الأساس أنه على الرغم من أن معادلات YUV إلى RGB الخاصة بنا كانت صحيحة، إلا أننا لم نقم بأخذ عينات من بيانات V بشكل صحيح!لذلك لم يكن من الممكن أن يساعد أي قدر من التلاعب بالمعادلات!

في النهاية، أوصي بالاستراتيجية التالية لأي شخص يحاول القيام بذلك:

1) اضبط R وG وB على القيمة من Y.يجب أن تحصل على صورة ذات تدرج رمادي (حيث أن Y يحتوي على النصوع فقط).2) بعد ذلك، اضبط R وG وB على U.يجب أن تحصل على ألوان مضحكة!3) أخيرًا قم بتعيين R وG وB إلى V.مرة أخرى، يجب أن تحصل على ألوان مضحكة.

كما أن تطبيع القيم بشكل صحيح أمر بالغ الأهمية.تحقق من موقع fourcc.org الخاص بنا لمناقشة التطبيع الصحيح لـ YUV.

نصائح أخرى

الاقتراح الوحيد الذي يتبادر إلى الذهن هو أن القوام بتنسيق غير مناسب (منخفض الدقة أو مضغوط).

هل يمكنك وصف الطريقة التي يبدو بها الإخراج خاطئًا؟هل هناك أي فرصة للحصول على لقطة شاشة صحيحة مقابل لقطة شاشة خاطئة؟

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