Textur "Kräuseln"

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Benibaerenstark

Betreff: Textur "Kräuseln"

BeitragMo, Mai 29, 2006 16:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit dem Photoshop lassen sich herrlich einfach Wassereffekte erzeugen. Wie kann man solche Effekte mit Blitz3D programmieren? Sinusförmige Verzerrungen? (Würde am Rande ja weisse lücken entstehen.) Ich habe auf Blitzbasic.com ein Tool namens TextureWobbler gesehen, aber da gibts keinen Code dazu.

user posted image

mfg beni
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu
 

Dreamora

BeitragMo, Mai 29, 2006 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Bild rendern, eine zweites bild erzeugen mit der gleichen grösse und dann das Bild Pixel für Pixel kopieren, wobei der Ort wo du reinschreibst über sin / cos definiert wird (also du liest bei x,y aus, schreibst aber zb in x, y + sin(winkel) oder so)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

aMul

Sieger des Minimalist Compo 01/13

BeitragMo, Mai 29, 2006 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder du könntest auch, was sicherlich wegen der Rechnungen einfacher wäre, ein flaches mesh erstellen, Textur drauf, Vertexe verziehen, fertig. Damit könntest du auch die weißen Ränder vorbeugen, in dem du der Vertexe am Rand eifach nicht verziehst.

Hoffe, das ich helfen konnte...

MfG
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

x-pressive

BeitragDi, Mai 30, 2006 9:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, aber für die Vertex-Methode gehen leider viele Vertices drauf, vor allem bei grossen Flächen. Und per Textur-Veränderung könnte man viel weichere, geschwungenere und interessantere Effekte erzeugen. Das würde mich auch interessieren.

Hier mal ein kleiner Test, wie es aussieht, wenn man ein Bild mit einem Plasma-Effekt verzerrt. Sieht ganz interessant aus:

Code: [AUSKLAPPEN]
Graphics 640,480,0,2 : SetBuffer BackBuffer()

Global Img_Original% = LoadImage("test.jpg")
Global Img_Plasma%   = CopyImage(Img_Original)
Global plasma1%
Global plasma2%
Global plasma3%
Dim    cosinus%(512)
Dim    mrgb%   (255,255)

; PLASMA SINUS ARRAY
For c = 0 To 512 : cosinus(c) = Cos((115*3.14159265358 * c) / 256) * 48 + 48 : Next

; READ IMAGE INTO ARRAY
SetBuffer ImageBuffer(Img_Plasma) : LockBuffer
For x = 0 To 255 : For y = 0 To 255 : mrgb(x,y) = ReadPixelFast(x,y) : Next : Next
UnlockBuffer : SetBuffer BackBuffer()

; MAINLOOP
While Not KeyHit(1)
   Plasmarize Img_Plasma
   DrawImage  Img_Original,0,0
   DrawImage  Img_Plasma  ,300,0
   Flip 1
Wend

End

; ---------------------------------------------------------
; FUNCTION: PLASMARIZE IMAGE
; ---------------------------------------------------------
Function Plasmarize(Img%)

   Local y%, d%, x%, f%

   plasma1 = plasma1 + 1 : If plasma1 >= 256 plasma1 = 0
   plasma2 = plasma2 + 1 : If plasma2 >= 256 plasma2 = 0
   plasma3 = plasma3 + 1 : If plasma3 >= 256 plasma3 = 0
   
   SetBuffer ImageBuffer(Img) : LockBuffer
   For y = 0 To 255
      d = cosinus(y + plasma2) + cosinus(y + plasma3)
      For x = 0 To 255
         f = (cosinus(x + plasma1) + cosinus(x + y) + d) And $FF
         WritePixelFast x,y,mrgb(f,d)
      Next
   Next
   UnlockBuffer : SetBuffer BackBuffer()

End Function


Ihr braucht dazu ein irgendein Bild namens test.jpg in der Grösse 256x256.

Vielleicht könnte man das noch ein wenig modifizieren, damit es mehr nach dem Wobble-Wasseroberfläche wie oben aussieht.
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Benibaerenstark

BeitragDi, Mai 30, 2006 12:06
Antworten mit Zitat
Benutzer-Profile anzeigen
ich habe eine einfache Funktion geschrieben. nicht als endresultat, sondern um herumzuprobieren

Verfahren: Werte auslesen, y werte mit dem Sinus verzerren, die verzerrten werte auslesen und noch x werte verzerren. (beides auf einmal ergab schwarze Stellen)

Pfeiltasten um Amplitude und Frequenz der Schwingungen zu erhöhen.


Verbesserungsbedarf:

-In Randnähe muss die Amplitude abnehmen, sodass sie ganz am Rand=0 ist. Somit gäbe es keine schwarzen stellen.

-leider nicht echtzeit-tauglich. Wieviele Frames habt ihr?, wie könnte man die Funktion beschleunigen


Was ich noch gemacht habe, war aus den einzelnen Bildern eine Animation zu erstellen, diese ist dann zwar schnell Bewegt, aber keine echtzeitreflexion. aber in einem 2D-Game wäre es evtl. doch noch ein guter Effekt.

Screen: echtzeit-Verzerrung
user posted image

Screen: Animation speichern, spiegeln und flacher machen-läuft mit normaler FPS
user posted image

Screen:Baum,256*256
user posted image


EDIT: kompletter code
Code: [AUSKLAPPEN]
;Kräuseln

Graphics3D 1024,768,32,1
SetBuffer BackBuffer()


img1=LoadImage ("Baum.jpg") ;Ursprungsbild Laden

Global amplitude=8
Global frequenz=12
Global framecounter=0
While Not KeyHit(1)
 Cls




 If KeyDown (200) Then amplitude= amplitude+1 ;Werte verändern
 If KeyDown (208) Then amplitude= amplitude-1
 If KeyDown (205) Then frequenz = frequenz+1
 If KeyDown (203) Then frequenz = frequenz-1



  DrawImage img1,10,50         ;Ursprungsbild zeichnen

  framecounter=framecounter+10            ;die Wellenverschiebung, für die bewegung der wellen zuständig (animation, daher der name)
  If framecounter>360 Then framecounter=0

  krauseln(10,50,256,256,amplitude,frequenz) ;startpunkt X/y,höhe, breite,amplitude,frequenz
 
  Text 0,0,"Frames: "+FPS()
  Text 0,20,"Amplitude: "+amplitude
  Text 0,40,"Frequenz: "+frequenz
  Text 150,40,"Framecounter: "+framecounter
 Flip
Wend
End



Function krauseln (x=0,y=0,breite=256,hoehe=256,amplitude=8,frequenz=12)

 LockBuffer BackBuffer()

  For b = x To x+breite-1
   For h = y To y+hoehe-1

    wert= ReadPixelFast(b,h)     ;Pixel für pixel auslesen
    WritePixelFast  b+270,amplitude*Sin((frequenz*b)+framecounter)+h,wert ;Y-wert verzerren

  Next
 Next

 For b = x To x+breite-1
   For h = y To y+hoehe-1

    wert2= ReadPixelFast(b+270,h)  ;verzerrte Werte auslesen
    WritePixelFast  (amplitude/2)*Cos(frequenz*h+framecounter)+b+270,270+h,wert2 ;X-werte verzerren
 
  Next
 Next



 UnlockBuffer BackBuffer()
 
End Function








Global fps_ms=0,fps_frames,fps_anzeige
Function FPS()
   fps_frames=fps_frames+1
   If MilliSecs()-fps_ms >= 1000 Then
      fps_anzeige=fps_frames
      fps_frames=0
      fps_ms=MilliSecs()
   EndIf
   Return fps_anzeige
End Function
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu
  • Zuletzt bearbeitet von Benibaerenstark am Di, Mai 30, 2006 13:19, insgesamt 3-mal bearbeitet

x-pressive

BeitragDi, Mai 30, 2006 12:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Arrow "Expecting End Function" - Fehlt am Schluss
Arrow "Function 'fps' not found"

Poste doch mal bitte den kompletten Code.
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Benibaerenstark

BeitragDi, Mai 30, 2006 13:14
Antworten mit Zitat
Benutzer-Profile anzeigen
so, neuer code ist gepostet, ich hatte nicht alles kopiert.
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu

x-pressive

BeitragDi, Mai 30, 2006 14:06
Antworten mit Zitat
Benutzer-Profile anzeigen
[Bitte löschen]
  • Zuletzt bearbeitet von x-pressive am Di, Mai 30, 2006 14:42, insgesamt 2-mal bearbeitet

Benibaerenstark

BeitragDi, Mai 30, 2006 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
sieht toll aus!(vor allem die geschwindigkeit!)

Wenn ich das richtig sehe, ist der "Trick" für die Beschleunigung die Verwendung von Copyrect und die damit verbundene Zeilen-weise Verarbeitung?

Ich werde mir den Code ansehen, und sehen ob (und wie) ich einen Effekt erzielen kann, wie bei meinen Arbeiten.

mfg beni
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group