Seite 2 von 2

Re: Falsche Farben und Text bei OpengL

Verfasst: 29.04.2018 15:49
von ccode_new
ccode_new hat geschrieben:Verseteh die Frage nicht.
Deine Texture hat doch schon einen Alpha Kanal (#GL_RGBA).
Du musst halt die richten Sachen von den rendern einschalten: glEnable(), glBlendFunc(), #GL_BLEND, #GL_ALPHA_TEST usw.
Das ist noch das Problem.

Hast du dafür ein funktionierendes kleines Beispiel ?

Re: Falsche Farben und Text bei OpengL

Verfasst: 29.04.2018 19:47
von ccode_new
Betreff: Farbechtheit beim Overlay
Was ist hier ein optimaler Weg ?

Code: Alles auswählen

Procedure glDraw3DImage(x.f,y.f,z.f,Img.i,w.f=0,h.f=0)
  Protected Dim ccol.f(3)
  If IsImage(Img)
    If w = 0
      w = ImageWidth(Img)
    EndIf
    If h = 0
      h = ImageHeight(Img)
    EndIf
    glGetFloatv_(#GL_CURRENT_COLOR, @ccol())
    glPushMatrix_()
    glMatrixMode_(#GL_MODELVIEW) 
    glColor4f_(1.0,1.0,1.0,1.0) ;WICHTIG!
    glBindTexture_(#GL_TEXTURE_2D, GTex(Img))
    glEnable_(#GL_BLEND)
    glBlendFunc_(#GL_SRC_COLOR, #GL_DST_COLOR) ;Wie bekomme ich das mit der Farbechtheit hin ? Was ist hier die optimale Lösung ?
    glBegin_(#GL_QUADS)
    glTexCoord3f_(0,0,z)
    glVertex3f_(x,y,z)
    glTexCoord3f_(1,0,z)
    glVertex3f_(x+w,y,z)
    glTexCoord3f_(1,1,z)
    glVertex3f_(x+w,y+h,z)
    glTexCoord3f_(0,1,z)
    glVertex3f_(x,y+h,z)
    glEnd_()
    glBindTexture_(#GL_TEXTURE_2D, 0)
    glDisable_(#GL_BLEND)
    glPopMatrix_()
    glFinish_()
    glColor4f_(ccol(0),ccol(1),ccol(2),ccol(3))
  EndIf
EndProcedure

Re: Falsche Farben und Text bei OpengL

Verfasst: 29.04.2018 21:02
von Mijikai
Meine Textur-Funktion (mit Alpha) sieht so aus:

Code: Alles auswählen


Structure SIZE_STRUCT
  X.f
  Y.f
EndStructure

Structure TEXTURE_STRUCT
  Handle.i
  Size.SIZE_STRUCT
  Center.SIZE_STRUCT
EndStructure

Procedure.i DrawTexture2D(*Texture.TEXTURE_STRUCT,X.f,Y.f,Alpha.a)
  glEnable_(#GL_TEXTURE_RECTANGLE)
  glBindTexture_(#GL_TEXTURE_RECTANGLE,*Texture\Handle)
  glBegin_(#GL_QUADS)
  If Alpha
    glColor4ub_(255,255,255,Alpha)
  Else
    glColor4f_(1,1,1,1)
  EndIf
  glTexCoord2f_(0,*Texture\Size\Y)
  glVertex3f_(X,Y,Z)
  glTexCoord2f_(*Texture\Size\X,*Texture\Size\Y)
  glVertex3f_(X + *Texture\Size\X,Y,Z)  
  glTexCoord2f_(*Texture\Size\X,0)
  glVertex3f_(X + *Texture\Size\X,Y + *Texture\Size\Y,Z)
  glTexCoord2f_(0,0)
  glVertex3f_(X,Y + *Texture\Size\Y,Z)
  glEnd_()
  glDisable_(#GL_TEXTURE_RECTANGLE)
EndProcedure
Und ich hab nur einmal beim initialisieren das hier:

Code: Alles auswählen

glEnable_(#GL_BLEND) 
glBlendFunc_(#GL_SRC_ALPHA,#GL_ONE_MINUS_SRC_ALPHA)

Re: Falsche Farben und Text bei OpengL

Verfasst: 29.04.2018 21:13
von ccode_new
Hallo Mijikai,

Ja damit kann man ganze Bilder/Texturen Transparent setzen.

Ich möchte aber Farben transparent setzen für eine Textdarstellung, etc.

Dein Code ist dafür leider unbrauchbar.

Re: Falsche Farben und Text bei OpengL

Verfasst: 29.04.2018 21:18
von Mijikai
Bei einem Bild mit (32 bit) Alpha/ Transparent sollte alles 1:1 wie beim Original dargestellt werden...

Beispiel:
Bild

Oder willst du den Alphawert nach dem das Bild geladen ist ändern ?

Re: Falsche Farben und Text bei OpengL

Verfasst: 29.04.2018 21:25
von ccode_new
Hierbei:

Code: Alles auswählen

If StartDrawing(ImageOutput(timg))
      DrawingMode(#PB_2DDrawing_Transparent)
      DrawText(0, 0, text, tcolor)
      StopDrawing()
    EndIf
würde der Texthintergrund schwarz sein!!!

Wenn ich das als Overlay verwenden möchte muss der Hintergrund durchscheinend sein.

Re: Falsche Farben und Text bei OpengL

Verfasst: 29.04.2018 21:32
von Mijikai

Re: Falsche Farben und Text bei OpengL

Verfasst: 30.04.2018 10:02
von ccode_new
Meine Lösung ist sehr simple und heißt im übrigen Vektorgrafik.

Code: Alles auswählen

If CreateImage(timg, tw, th, 32, #PB_Image_Transparent) ;TextImage
    If StartVectorDrawing(ImageVectorOutput(timg))
        
        VectorFont(FontID(tfont), tfh)
        VectorSourceColor(tcolor)
        
        MovePathCursor(0, 0)
        DrawVectorText(text)
        
        StopVectorDrawing()
      EndIf
Wichtig ist dabei mit RGBA-Werten bei der Farbe zu arbeiten.