Seite 1 von 1

Transparente übereinanderliegende Sprites

Verfasst: 31.05.2015 14:28
von Delle
Hallo,

vielleicht kennt jemand diesen Effekt noch:

Bild

2 Kreise ("Funkwellen") lila/gelb bewegen sich hin und her, die Überlappungen beider Kreise verursachen aber rote Stellen.

Ist sowas mit PB überhaupt realisierbar? Mit dem Amiga ging es anscheinend problemlos mit einem Trick...

Ich kenn sowas ähnliches nur aus meinem Zeichenprogramm... Mischmodus "Differenz" oder sowas...

Danke,
Delle

Re: Transparente übereinanderliegende Sprites

Verfasst: 31.05.2015 14:31
von NicTheQuick
Wahrscheinlich brauchst du nur den richtigen 'SpriteBlendingMode()'.

Re: Transparente übereinanderliegende Sprites

Verfasst: 31.05.2015 17:49
von STARGÅTE
Die Kreise sind nicht Lila und Gelb, sondern Rot und Lila, und die Mischung wird gelb.

Genau so bekomm ich das gerade nicht hin, aber mit einem passenden BlendingMode kann man Farben addieren, also Rot+Grün = Gelb:

Code: Alles auswählen

InitSprite()

Enumeration
	#Window
	#Sprite_Red
	#Sprite_Blue
EndEnumeration

OpenWindow(#Window, 0, 0, 800, 600, "ScreenTitle", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Window), 0, 0, WindowWidth(#Window), WindowHeight(#Window), 0, 0, 0)

CreateSprite(#Sprite_Red, 1024, 1024)
CreateSprite(#Sprite_Blue, 1024, 1024)

Define N

If StartDrawing(SpriteOutput(#Sprite_Red))
	For N = 20 To 0 Step -1
		Circle(OutputWidth()/2, OutputHeight()/2, OutputWidth()*N/40, (N%2)*$0000FF)
	Next
	StopDrawing()
EndIf
If StartDrawing(SpriteOutput(#Sprite_Blue))
	For N = 20 To 0 Step -1
		Circle(OutputWidth()/2, OutputHeight()/2, OutputWidth()*N/40, (N%2)*$00FF00)
	Next
	StopDrawing()
EndIf


Repeat
	
	Repeat
		
		Select WindowEvent()
			Case #PB_Event_CloseWindow
				End
			Case #Null
				Break
		EndSelect
		
	ForEver
	
	ClearScreen(0)
	
	SpriteBlendingMode(#PB_Sprite_BlendSourceAlpha, #PB_Sprite_BlendOne)
	DisplayTransparentSprite(#Sprite_Red, 300+Sin(ElapsedMilliseconds()/1000)*200-512, 300-512)
	DisplayTransparentSprite(#Sprite_Blue, 500-512, 300-512)
	
	FlipBuffers()
	
ForEver

Re: Transparente übereinanderliegende Sprites

Verfasst: 31.05.2015 18:03
von Delle
STARGÅTE hat geschrieben:Genau so bekomm ich das gerade nicht hin, aber mit einem passenden BlendingMode kann man Farben addieren, also Rot+Grün = Gelb:
Muss ja nicht 1:1 sein, ging mehr ums Prinzip! ;) So ähnlich hab ich's jetzt mittels des Blendingmodus-Tipp auch hinbekommen :allright:

Hattest Du nichtmal auch eine UserLib mit solchen Effekten veröffentlicht? Gibt's die Sources irgendwo?