Frage

Ich bin auf der Suche nach einer Möglichkeit, den Hintergrund einer 24-Bit-Bitmap zu entfernen, während das Hauptbild völlig undurchsichtig zu halten, bis jetzt den Zweck hat dazu gedient, Mischen, aber jetzt muss ich die Haupt-Bit undurchsichtig halten. Ich habe bei Google gesucht, aber nichts gefunden hilfreich, ich glaube, ich wahrscheinlich für die falschen Begriffe bin auf der Suche obwohl, so wäre jede Hilfe sehr geschätzt werden.

Edit: Ja sorry, ich bin mit schwarz jetzt als Hintergrund.

War es hilfreich?

Lösung

Wenn Sie die Textur für OpenGL erstellen, sollten Sie die Textur als 32-Bit RGBA Textur erstellen. Erstellen Sie einen Puffer den Inhalt dieser neuen 32-Bit-Textur zu halten und durchlaufen Ihre 24-Bit-Bitmap. Jedes Mal, wenn Sie in Ihrer Hintergrundfarbe kommen, stellen Sie den Alpha-Null in dem neuen 32-Bit-Bitmap.

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;
}

Andere Tipps

Sie müssen Ihre Texturen mit GL_RGBA Format in Ihrem Anruf glTexImage2D laden. Wenn Sie dies getan haben, dann brauchen Sie nur Mischung zu aktivieren:

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

Das klingt ein wenig verwirrend. 24-Bit-Bild hat keine Transparenz, es ist einfach eine Anordnung von RGB-Werten. Was meinst du mit „der Haupt-Bit-opaken halten“? Haben Sie alle Pixel mit bestimmten Farbe haben wollen - zum Beispiel alle schwarzen Pixel - transparent? Wenn das ist, was Sie wollen, können Sie Google opengl Transparenzmaske ( finden Sie in den NeHe # 20 zum Beispiel).

Was Sie wirklich brauchen, ist ein Alpha-Kanal in Ihrem Bild. Da es 24 Bit ist, müssen Sie nicht ein, aber man konnte man on the fly erstellen, wie Sie das Bild laden, indem Sie einfach die Alpha auf Null für jeden schwarze Einstellung (0x000000) Pixel

Klingt für mich wie Sie für den Stencil Buffer suchen, die nur für diese Art von Aufgabe der Beschränkung der Zeichenfläche verwendet wird.

Der Puffer speichert einen Wert zu jedem Pixel zugeordnet ist, in denen 1 ist es nachfolgende Zeichnung wiedergegeben werden und wo es 0 ist, wird es maskiert werden. Normalerweise Stencilbuffer werden verwendet, mit Mehrweg-Techniken machen Dinge wie Reflexionen zu erstellen und leitet angezeigt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top