Seite 1 von 1

Alphablending / Spritemasken

Verfasst: 26.04.2007 09:02
von hmi222
Hi zusammen...
Hab mal ne Frage zum AlphaBlending.

Habe eine BitmapFont (Buchstabe weiß, Hintergrund schwarz).
Über den Weißen Buchstaben möchte ich ein farbiges 3DSprite legen.
Allerdings sollte diese Farbe NUR auf dem weißen Buchstaben zu sehn
sein, nicht auf dem schwarzen Hintergrund...
Ist das möglich oder könnte man das anders lösen?

Vielen DAnk...

titel ergänzt - Kaeru fecit

Verfasst: 26.04.2007 09:17
von Kaeru Gaman
mit Sprite3D wohl weniger...

wie das mit RGBFilter ist, bin ich mir nicht sicher,
könnte sein, dass der auf schwarz nicht zum tragen kommt.

allerdings könntest du mit klassischen masken arbeiten:

1) du stellst das farbsprite auf einem buffersprite dar
2) du legst die schrift drüber, wobei du weiß als transparente farbe definierst.
als ergebnis wird nur dort, wo die weißen buchstaben waren, das farbmuster zu sehen sein.
3) du stellst das buffersprite auf dem bildschirm dar.
hierbei kannst du auch schwarz als transparente farbe definieren,
denn wird die bunte schrift direkt auf den hintergrund des screens dargestellt.


....was das ganze jedoch mit alphablending zu tun haben soll....

Verfasst: 26.04.2007 11:53
von hmi222
Danke Kaeru Gaman
werd's gleich probieren...

Alphablending... - so hieß ein PB-Beispiel bei dem ein paar Comic-Köpfe
auf einem Hintergrund mit wechselnder Transparenz ein-und ausgeblendet wird.
Genau das hab ich in meinem Beispiel mit Farbbalken über den BitmapFonts gemacht... Nur da war das Problem, das die Balken auch über der schwarzen Fläche eingeblendet wurde...

Vielen Dank...

Verfasst: 26.04.2007 16:50
von Kaeru Gaman
konnte es nicht lassen, mal damit rumzuspielen.... :mrgreen:

Code: Alles auswählen

EnableExplicit

InitSprite()
InitKeyboard()
LoadFont(0,"courier new",64,#PB_Font_Bold)
OpenScreen(800,600,32,"x")
Define EXIT.l = 0
Define n.l
Define c$
Define Row.l = 25
Define Glide.l = 1
Define col1.l
Define col2.l
Define Count.l = 0
Define Shift.d
Define X1.l
Define Y1.l

For n=0 To 10
  CreateSprite(n,55,50)
Next
For n=1 To 5
  TransparentSpriteColor(n,$FFFFFF)
  TransparentSpriteColor(n+5,$000000)
Next
Restore Letters
For n=1 To 5
  Read c$
  StartDrawing(SpriteOutput(n))
    DrawingFont(FontID(0))
    DrawText(2,-22,c$,$FFFFFF,$000000)
  StopDrawing()
Next
Repeat
  ExamineKeyboard()
  ClearScreen($402010)
  Row + Glide
  If Row = 0 Or Row = 49
    Glide = -Glide
  EndIf
  StartDrawing(SpriteOutput(0))
    For n=0 To 24
      col1 = 255 - 10*n
      col2 = col1 * 256 + 255
      Line(0,Row + n     ,55,0,col2)
      Line(0,Row - n     ,55,0,col2)
      Line(0,Row + 25 + n,55,0,col1)
      Line(0,Row - 25 - n,55,0,col1)
    Next
  StopDrawing()
  Count + 1
  If Count > 314159265
    Count = 0
  EndIf
  For n=5 To 1 Step -1
    UseBuffer(n+5)
      DisplaySprite(0,0,0)
      DisplayTransparentSprite(n,0,0)
    UseBuffer(-1)
    Shift = Count - 20*n
    X1 = 400 - 27 + 250*Sin(Shift / 37)
    Y1 = 300 - 25 + 250*Cos(Shift / 29)
    DisplayTransparentSprite(n+5,X1,Y1)
  Next
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) 
End
DataSection
Letters:
Data.s "K","A","E","R","U"
EndDataSection

Verfasst: 08.03.2008 15:42
von #NULL
sieht cool aus :allright:

Verfasst: 08.03.2008 16:30
von Deeem2031
Wieso soll das mit Sprite3D nicht möglich sein!?

Code: Alles auswählen

InitSprite()
InitSprite3D()
OpenWindowedScreen(OpenWindow(0,0,0,640,480,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu),0,0,640,480,0,0,0)
CreateSprite(0,256,256,#PB_Sprite_Texture)
CreateSprite3D(0,0)
CreateSprite(1,256,256,#PB_Sprite_Texture)
CreateSprite3D(1,1)
StartDrawing(SpriteOutput(0))
  For y = 0 To 10
    DrawText(5,y*20+5,"ABCDEFGHIJKLMNOPQRSTUVWXYZ",$FFFFFF,0)
  Next
StopDrawing()
StartDrawing(SpriteOutput(1))
  For x = 0 To 255 Step 8
    For y = 0 To 255 Step 8
      Box(x,y,8,8,Random($FFFFFF))
    Next
  Next
StopDrawing()

  #D3DBLEND_ZERO            = 1
  #D3DBLEND_ONE             = 2
  #D3DBLEND_SRCCOLOR        = 3
  #D3DBLEND_INVSRCCOLOR     = 4
  #D3DBLEND_SRCALPHA        = 5
  #D3DBLEND_INVSRCALPHA     = 6
  #D3DBLEND_DESTALPHA       = 7
  #D3DBLEND_INVDESTALPHA    = 8
  #D3DBLEND_DESTCOLOR       = 9
  #D3DBLEND_INVDESTCOLOR    = 10
  #D3DBLEND_SRCALPHASAT     = 11
  #D3DBLEND_BOTHSRCALPHA    = 12
  #D3DBLEND_BOTHINVSRCALPHA = 13

Repeat
  Start3D()
    Sprite3DBlendingMode(#D3DBLEND_SRCALPHA, #D3DBLEND_INVSRCALPHA)
    DisplaySprite3D(0,0,0)
    DisplaySprite3D(1,300,0)
    
    
    DisplaySprite3D(0,0,256)
    Sprite3DBlendingMode(#D3DBLEND_DESTCOLOR, #D3DBLEND_ZERO)
    DisplaySprite3D(1,0,256)
  Stop3D()
  FlipBuffers()

  we = WindowEvent()
  While we
    Select we
      Case #PB_Event_CloseWindow
        quit = #True
    EndSelect
    we = WindowEvent()
  Wend
Until quit