Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   OpenGL Tranzparenz in Textur Alpha-Blending (https://www.delphipraxis.net/181155-opengl-tranzparenz-textur-alpha-blending.html)

luisk 20. Jul 2014 17:02

OpenGL Tranzparenz in Textur Alpha-Blending
 
Hallo,
hat jemand Erfahrung Transparenz und Alphablending ?
Ich will den weißen Hintergrund transparent Alpha= 0
alle anderen Farben sollen dargestellt werden Alpha=255
Übernahme der Pixel aus TBitmap über scanline
Delphi-Quellcode:
 ll_rgbQuad.rgbRed:= ll_ptr.rgbBlue;
         ll_rgbQuad.rgbGreen:= ll_ptr.rgbGreen;
         ll_rgbQuad.rgbBlue:= ll_ptr.rgbRed;
         ll_rgbQuad.Alpha:=255;

         if ( ll_rgbQuad.rgbRed + ll_rgbQuad.rgbGreen + ll_rgbQuad.rgbBlue =0 ) then begin
              ll_rgbQuad.rgbAlpha:=0;
         end;
Generierung der Textur
Delphi-Quellcode:
        glGenTextures ( 1, @l_textur_id );
        glBindTexture ( GL_TEXTURE_2D, cardinal(ar_Texture_ID[in_index]) );
        glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_linear );
        glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_linear );

        glTexImage2D ( GL_TEXTURE_2D, 0, 4, ll_b, ll_h, 0,
                        GL_RGBA, GL_UNSIGNED_BYTE, @texdata );
Ausgabe
Delphi-Quellcode:
  glEnable(GL_ALPHA_TEST);
   glAlphaFunc(GL_GREATER, 0);
   // Rendern
  glListBase(0);

   glpushmatrix();
   gltranslatef(-17,0,0);
       l_String:='aibg'+rightstr(inttostr(i),3);
         glCallLists (length(l_String), GL_UNSIGNED_BYTE, @l_String[1]);
      glpopmatrix();
Ausgabe funktioniert zwar, leider nicht transparent.

gibt es irgendwo ein Beispiel ?

Jens01 20. Jul 2014 17:36

AW: OpenGL Tranzparenz in Textur Alpha-Blending
 
Zitat:

gibt es irgendwo ein Beispiel ?
Hier

luisk 20. Jul 2014 17:55

AW: OpenGL Tranzparenz in Textur Alpha-Blending
 
danke, das hatte ich schon gesehen.
Ich bräuchte es viel einfacher, da ich nur über den Alpha-Wert
Transparenz erreichen will:

entweder über
Delphi-Quellcode:
  glEnable(GL_ALPHA_TEST);
   glAlphaFunc(GL_Greater , 0);
oder
Delphi-Quellcode:
glEnable(GL_ALPHA_TEST);
   glAlphaFunc(GL_Less , 1);
sollte gehen, funzt aber nicht:cry:

luisk 20. Jul 2014 18:05

AW: OpenGL Tranzparenz in Textur Alpha-Blending
 
wenn die Textfarbe Schwarz ist mit Alpha=0
und der Hintergrund weiss mit Alpha=255
geht es inzwischen.
Mit einer anderen SchriftFarben statt Schwarz
geht es leider nicht:cry:

Delphi-Quellcode:
   glEnable(GL_ALPHA_TEST);
   glAlphaFunc(GL_Greater, 0.1);
Die Textfarbe sollte doch mit dem Alpha-Wert gar nichts zu tun haben.

BUG 20. Jul 2014 18:17

AW: OpenGL Tranzparenz in Textur Alpha-Blending
 
Delphi-Quellcode:
if ( ll_rgbQuad.rgbRed + ll_rgbQuad.rgbGreen + ll_rgbQuad.rgbBlue =0 ) then begin
              ll_rgbQuad.rgbAlpha:=0; //<-
         end;
Hast du mal geguckt, ob diese Zeile überhaupt ausgeführt wird?
Könnte nämlich auch an Gleitkommazahlen-Ungenauigkeit hängen. Beziehungsweise: Ist dein Weiß auch wirklich #000?

luisk 20. Jul 2014 18:50

AW: OpenGL Tranzparenz in Textur Alpha-Blending
 
wird ausgeführt: Breakpoint spricht an.

luisk 20. Jul 2014 19:52

AW: OpenGL Tranzparenz in Textur Alpha-Blending
 
so geht's::idea:
Delphi-Quellcode:
   
if ( ll_rgbQuad.rgbRed + ll_rgbQuad.rgbGreen + ll_rgbQuad.rgbBlue < 3*255 ) then begin
    ll_rgbQuad.rgbReserved:=255;
end;

luisk 20. Jul 2014 19:54

AW: OpenGL Tranzparenz in Textur Alpha-Blending
 
next Problem:

kann man die Farben in einer Textur tauschen ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz