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:
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.