في ملف DDS، هل يمكنك اكتشاف الأنسجة ذات 0/1 بت ألفا؟

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

سؤال

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

هل هناك طريقة سهلة لمعرفة من الرأس ما إذا كانت صورة DDS تحتوي على ألفا؟

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

المحلول

بقدر ما أعرف، ليس هناك طريقة لمعرفة ذلك من الرأس.توجد علامة DDPF_ALPHAPIXELS، ولكن لا أعتقد أنه سيتم تعيينها بناءً على ما هو موجود في بيانات البكسل.ستحتاج إلى تحليل كتل DXT1، والبحث عن الألوان التي تحتوي على 0 ألفا (مع التأكد من استخدام اللون بالفعل في الكتلة أيضًا، على ما أعتقد).

نصائح أخرى

وأنا أتفق مع الإجابة المقبولة.قد تصبح مهمتك أسهل قليلاً باستخدام مكتبة "squish" لفك ضغط الكتل نيابةً عنك.

http://www.sjbrown.co.uk/?code=squish

يعد DDS غلافًا سيئًا جدًا لبيانات DXT (أو BTC).لن يساعدك الرأس.لم يكن لدى DXT1 الأصلي العادي أي ألفا.أعتقد أن d3d في الوقت الحاضر يقوم بالفعل بفك تشفير DXT1 باستخدام ألفا.تبدو كل كتلة DXT1 كما يلي:اللون 1 (16 بت) اللون 2 (16 بت) المؤشرات (32 بت).إذا كانت قيمة color1 ذات 16 بت أقل من color2 (مجرد مقارنة uint16، لا شيء خيالي!) فإن الكتلة لا تحتوي على ألفا.وإلا فإنه يفعل.لذلك للإجابة على سؤالك:تخطي الرأس، اقرأ 16 بت أ، اقرأ 16 بت ب، إذا أ> ب هناك ألفا.وإلا تخطي 32 بت وكرر حتى eof.تنسيقات DXT الأخرى مثل DXT5 تحتوي دائمًا على ألفا.من النادر جدًا أن يعتمد الأشخاص على خدعة DXT1 alpha لأن بعض الأجهزة (intel..) لا تدعمها بشكل موثوق.

لا، يستخدم رأس DDS علامات ألفا فقط للصور غير المضغوطة.كانت لدي حاجة مماثلة لمعرفة ما إذا كانت صورة DXT1 تستخدم ألفا 1 بت وبعد بحث طويل وجدت هذا المرجع هنا: https://msdn.microsoft.com/en-us/library/windows/desktop/bb147243(v=vs.85).aspx

بشكل أساسي، إذا كان color_0 <= color_1، فهناك احتمال أن يحتوي الملمس على ألفا 1 بت.لمزيد من التحقق من ذلك، تحتاج إلى التحقق من الـ 32 بت التالية في أزواج 2 بت إذا كانت 11.ثم تابع هذا لكل كتلة إذا لم يتم العثور عليها.

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