سؤال

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

وتحرير: نعم آسف، أنا باستخدام حق أسود الآن كخلفية.

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

المحلول

وعند إنشاء نسيج ل OpenGL، فأنت تريد أن خلق نسيج باعتباره RGBA الملمس 32-بت. إنشاء منطقة عازلة لاحتواء محتويات هذا الملمس 32 بت الجديد وتكرار خلال نقطية 24 بت الخاص بك. في كل مرة كنت تأتي عبر لون الخلفية الخاصة بك، تعيين ألفا إلى الصفر في جديدة نقطية 32 بت الخاص بك.

struct Color32;
struct Color24;

void Load24BitTexture(Color24* ipTex24, int width, int height)
{
   Color32* lpTex32 = new Color32[width*height];

   for(x = 0; x < width; x++)
   {
      for(y = 0; y < height; y++)
      {
         int index = y*width+x;
         lpTex32[index].r = ipTex24[index].r;
         lpTex32[index].g = ipTex24[index].g;
         lpTex32[index].b = ipTex24[index].b;

         if( ipTex24[index] == BackgroundColor)
            lpTex32[index].a = 0;
         else
            lpTex32[index].a = 255;
      }
   }

   glTexImage2D(GL_TEXTURE_2D, 0, 4, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, lpTex32);

   delete [] lpTex32;
}

نصائح أخرى

وسوف تحتاج إلى تحميل القوام مع شكل GL_RGBA في دعوتكم إلى glTexImage2D. إذا كنت قد فعلت هذا فإنك تحتاج فقط إلى تمكين مزيج:

    /* Set up blend */
glEnable(GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

وهذا يبدو مربكا بعض الشيء. صورة 24bit ليس لديها الشفافية، انها ببساطة مجموعة من القيم RGB. ماذا تقصد ب "حفظ مبهمة بعض الشيء الرئيسي"؟ هل تريد أن يكون كل بكسل مع لون معين - على سبيل المثال كل بكسل السوداء - شفاف؟ إذا كان هذا هو ما تريد، يمكنك جوجل بينغل قناع الشفافية ( انظر NeHe # 20 على سبيل المثال).

ما تحتاجه حقا هو قناة ألفا في الصورة. وبما أنه من 24 بت، لم يكن لديك واحدة، ولكن هل يمكن إنشاء واحد على الطاير كما قمت بتحميل الصورة ببساطة عن طريق وضع ألفا إلى الصفر لكل أسود (0x000000) بكسل

ويبدو لي ان كنت تبحث عن العازلة استنسل، والذي يستخدم فقط لهذا النوع من مهمة تقييد مجال الرسم.

والمخزن المؤقت يخزن القيمة المرتبطة بكل بكسل، حيث انها سيتم تقديم 1 الرسم لاحق وحيث انها 0 سيتم ملثمين. وتستخدم مخازن الاستنسل عادة مع المتعددة الدخول جعل التقنيات لخلق أشياء مثل الانعكاسات ويرأس يعرض.

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