Aktuelle Zeit: 26.05.2020 14:03

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Sprite "Dissolve"-Effekt mittels Noisemap
BeitragVerfasst: 23.02.2020 22:16 
Offline
Benutzeravatar

Registriert: 23.07.2011 02:08
Hallo zusammen,

ich habe vor kurzem folgendes Video gesehen und in PB versucht nachzubauen: https://youtu.be/5dzGj9k8Qy8?t=622
Beim Timestamp, wird der Effekt demonstriert, den dieser Code nachahmt. Im Video geht er noch weiter, das ist aber im Code noch nicht umgesetzt.

Der Code is schlampig, also am besten erstmal einfach nur ausführen und anschauen. Ich versuch das in den nächsten Tagen etwas sauberer zu gestalten.

Die beiden Grafiken:

char.png https://abload.de/image.php?img=char09j2k.png
noise.png https://abload.de/image.php?img=noise4jkpf.png

Code:
UsePNGImageDecoder()
UsePNGImageEncoder()

EnableExplicit

Define char_sprite = LoadImage(#PB_Any, "char.png")
Define noise_image = LoadImage(#PB_Any, "noise.png")

Define noise_width = ImageWidth(noise_image)
Define noise_height = ImageHeight(noise_image)

Dim noise_array(noise_width, noise_height)
Dim noise_array_bin(noise_width, noise_height)
Dim char_array(noise_width, noise_height)


Define x,y
StartDrawing(ImageOutput(noise_image))
For y=0 To noise_height-1
   For x=0 To noise_width-1      
      noise_array(x,y) = Red(Point(x,y))      
   Next
Next
StopDrawing()

StartDrawing(ImageOutput(char_sprite))
DrawingMode(#PB_2DDrawing_AllChannels  )
For y=0 To noise_height-1
   For x=0 To noise_width-1   
      
      char_array(x,y) = Point(x,y)
   Next
Next
StopDrawing()




Procedure Binary(Array noise(2), Array noise_bin(2), threshold.i)
   Protected x,y
   Shared noise_height, noise_width, noise_array()
   For y=0 To noise_height-1
      For x=0 To noise_width-1         
         If noise_array(x,y) >= threshold
            noise_bin(x,y) = 1
         Else
            noise_bin(x,y) = 0
         EndIf          
      Next
   Next   
EndProcedure


Procedure noise2sprite(Array imgarray(2), new_image)
   Shared noise_height, noise_width, noise_array_bin()
   
   
   
   Protected x,y
   
   StartDrawing(ImageOutput(new_image))
   
   DrawingMode(#PB_2DDrawing_AlphaChannel )
   Box(0, 0, noise_width, noise_height, RGBA(0,0,0,0))
   
   
   DrawingMode(#PB_2DDrawing_AlphaBlend )
   
   Protected  c
   Protected noiselevel
   Protected alpha
   For y=0 To noise_height-1
      For x=0 To noise_width-1         
         c = imgarray(x,y)
         ;Debug Hex(Red(c)) + Hex(Green(c)) + Hex(Blue(c)) +"/"+ Hex(Alpha(c))
         noiselevel = noise_array_bin(x,y)
         
         
         
         
         Plot(x,y, RGBA(Red(c), Green(c), Blue(c),Alpha(c) * noiselevel))
         
         
         ;Plot(x,y, c)
         
      Next
   Next   
   
   
   StopDrawing()
   
EndProcedure



Define new_image = CreateImage(#PB_Any, noise_width, noise_height, 32, #PB_Image_Transparent )

Binary(noise_array(), noise_array_bin(), 0)

noise2sprite(char_array(), new_image)


Binary(noise_array(), noise_array_bin(), 100)

noise2sprite(char_array(), new_image)



OpenWindow(0, 0, 0, 164, 164, "Sprite Test", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)

CanvasGadget(0, 0, 0,164, 164)

AddWindowTimer(0, 0, 20)


Define n=0
Define e
Define dir =1
Define speed = 4
Repeat
   e=WaitWindowEvent()
   
   If e=#PB_Event_Timer
      If EventTimer()=0
         n + (speed * dir)
         
         If n>255
            dir=-1
         EndIf
         If n<0
            dir=1
         EndIf
               
         
         Binary(noise_array(), noise_array_bin(), n)
         noise2sprite(char_array(), new_image)
         
         StartDrawing(CanvasOutput(0))
         DrawingMode(#PB_2DDrawing_Default  )
         Box(0, 0, 164, 164, RGB(0,120,80))
         
         DrawingMode(#PB_2DDrawing_AlphaBlend   )
         DrawImage(ImageID(new_image), 0, 0)
         StopDrawing()
         
         
         
         
      EndIf
   EndIf
   
   
Until e=#PB_Event_CloseWindow
End

_________________
Signatur und so


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite "Dissolve"-Effekt mittels Noisemap
BeitragVerfasst: 26.02.2020 13:45 
Offline
Benutzeravatar

Registriert: 11.08.2005 19:08
Cooler Effekt 8)

_________________
Bild
Warum OpenSource eine Lizenz haben sollte
PureBasic-CodeArchiv-Rebirth: Git-Repository / Download – Jede Hilfe ist willkommen!
Manjaro Xfce x64 (Hauptsystem) :: WindowsXP/Xubuntu x86 (VirtualBox) :: PureBasic (Linux: x86/x64, Windows: x86) :: jeweils neueste Version


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye