Transparente übereinanderliegende Sprites

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Delle
Beiträge: 1118
Registriert: 10.05.2005 22:48

Transparente übereinanderliegende Sprites

Beitrag 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
PB 6.02 LTS + Win 11
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Transparente übereinanderliegende Sprites

Beitrag von NicTheQuick »

Wahrscheinlich brauchst du nur den richtigen 'SpriteBlendingMode()'.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Transparente übereinanderliegende Sprites

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Delle
Beiträge: 1118
Registriert: 10.05.2005 22:48

Re: Transparente übereinanderliegende Sprites

Beitrag 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?
PB 6.02 LTS + Win 11
Antworten