Textur "Kräuseln"
Übersicht

![]() |
BenibaerenstarkBetreff: Textur "Kräuseln" |
![]() Antworten mit Zitat ![]() |
---|---|---|
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.
mfg beni |
||
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 Screen: Animation speichern, spiegeln und flacher machen-läuft mit normaler FPS ![]() Screen:Baum,256*256 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
so, neuer code ist gepostet, ich hatte nicht alles kopiert. | ||
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu |
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
[Bitte löschen] | ||
- Zuletzt bearbeitet von x-pressive am Di, Mai 30, 2006 14:42, insgesamt 2-mal bearbeitet
![]() |
Benibaerenstark |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group