Falsche Farben und Text bei OpengL

Probleme beim Erstellen von 3D-Modellen und Texturen, keine Ahnung womit man Musik macht? Dies ist dein Forum.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Falsche Farben und Text bei OpengL

Beitrag 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 ?
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Falsche Farben und Text bei OpengL

Beitrag 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
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Falsche Farben und Text bei OpengL

Beitrag 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)
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Falsche Farben und Text bei OpengL

Beitrag 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.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Falsche Farben und Text bei OpengL

Beitrag 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 ?
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Falsche Farben und Text bei OpengL

Beitrag 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.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Falsche Farben und Text bei OpengL

Beitrag 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.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Antworten