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
Alphablending / Spritemasken
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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....
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....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
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...
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...
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
konnte es nicht lassen, mal damit rumzuspielen....

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
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
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

[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]