Seite 1 von 1
Pygame: Wasser-Effekt auf Teile eines Surface
Verfasst: Freitag 7. März 2014, 08:14
von ulrich1992
Hallo!
Wie kann ich mit Pygame auf festgelegten Bereichen (Polygone) eines Surface einen Wasserwellen Effekt machen?
Re: Pygame: Wasser-Effekt auf Teile eines Surface
Verfasst: Freitag 7. März 2014, 08:25
von Madmartigan
Deine Frage ist zu allgemein gefasst.
Was exakt meinst du mit "festgelegtem Bereich" und welche Art Effekt soll das werden?
Re: Pygame: Wasser-Effekt auf Teile eines Surface
Verfasst: Freitag 7. März 2014, 08:45
von ulrich1992
Bereiche in einem vorgerenderten Standbild die durch Angabe von Kordinaten von Polygonen definiert werden sollen animiert werden.
Es soll so wie die Wasseranimationen im Adventure-Klassiker "Riven" aussehen.
Edit:
Hier sieht man das z.B.
https://www.youtube.com/watch?v=x_kRXvgQ_ls
Edit 2:
Man kann in Riven die Wasser-Animation auch abschalten.
Dann sieht man, dass es eigentlich nur Standbilder sind, wo das Wasser mit irgendeinem Algorithmus animiert wird.
Re: Pygame: Wasser-Effekt auf Teile eines Surface
Verfasst: Freitag 7. März 2014, 13:24
von EyDu
Halbwegs glaubwürdiges Wasser ist nicht ganz einfach. Mit zu wenigen Polygonen und ordentlichen Reflexionen sieht es sehr billig aus. Eigentlich brauchst du auch noch Lichtbrechung, damit es einigermaßen aussieht. Wirf zu dem Thema mal die Suchmaschine deiner Wahl an, zu dem Thema gibt es wirklich hunderte von Tutorials und Papers.
Re: Pygame: Wasser-Effekt auf Teile eines Surface
Verfasst: Freitag 7. März 2014, 14:52
von Madmartigan
EyDu hat geschrieben:Halbwegs glaubwürdiges Wasser ist nicht ganz einfach. Mit zu wenigen Polygonen und ordentlichen Reflexionen sieht es sehr billig aus. Eigentlich brauchst du auch noch Lichtbrechung, damit es einigermaßen aussieht. Wirf zu dem Thema mal die Suchmaschine deiner Wahl an, zu dem Thema gibt es wirklich hunderte von Tutorials und Papers.
Ich bezweifle, dass er das meinte. Wenn ich es richtig verstanden habe, dann soll auf einem Bild ein Animationseffekt gezeichnet werden. Das hat nichts mit Polygonen im Sinne von Vertex-Animationen usw. zu tun.
Wellenbewegungen kann man sehr leicht durch nachträgliches Manipulieren der einzelnen Pixel im Bild erzeugen. Als einfachste Lösung bietet sich dabei die Verschiebung der Pixel gemäß einer Sinus-Funktion mit festen Parametern an. Um das nur auf Wasser und nicht auf dem Rest des vorgerenderten Bildes zu sehen, maskiert man das Ganze dann nachträglich.
Ich kann es im Video nicht exakt erkennen, aber das Wasser könnte durchaus mit einem ähnlichen Verfahren "bewegt" werden. Freunden älterer Bildschirmschoner mit Wasserfällen usw. dürfte dieser Effekt gut bekannt sein.
Re: Pygame: Wasser-Effekt auf Teile eines Surface
Verfasst: Freitag 7. März 2014, 15:07
von ulrich1992
Madmartigan hat geschrieben:
Ich bezweifle, dass er das meinte. Wenn ich es richtig verstanden habe, dann soll auf einem Bild ein Animationseffekt gezeichnet werden. Das hat nichts mit Polygonen im Sinne von Vertex-Animationen usw. zu tun.
Wellenbewegungen kann man sehr leicht durch nachträgliches Manipulieren der einzelnen Pixel im Bild erzeugen. Als einfachste Lösung bietet sich dabei die Verschiebung der Pixel gemäß einer Sinus-Funktion mit festen Parametern an. Um das nur auf Wasser und nicht auf dem Rest des vorgerenderten Bildes zu sehen, maskiert man das Ganze dann nachträglich.
Ich kann es im Video nicht exakt erkennen, aber das Wasser könnte durchaus mit einem ähnlichen Verfahren "bewegt" werden. Freunden älterer Bildschirmschoner mit Wasserfällen usw. dürfte dieser Effekt gut bekannt sein.
Genau diesen Effekt meine ich.
Wie nennt sich dieser Effekt genau?
Ich finde bei Google bei EIngabe von "Sinus Wasser Animation Effekt" nichts.
Mit Polygonen meine ich eben keine 3D Polygone, sondern einen Bereich in einer 2D-Grafik (so wie z.B. die Freihand-Auswahl oder das Lasso-Werkzeug von GIMP).
Nennt man das nicht Polygone?
Re: Pygame: Wasser-Effekt auf Teile eines Surface
Verfasst: Freitag 7. März 2014, 16:59
von EyDu
Dann such mal in die Richtung "caustics, texture, animated". Dann kannst du dir einige Kaustiken anschauen (oder diese verwenden). Zu dem Thema gibt es auch Generatoren, aber mit dem passenden Suchbegriff wirst du es schon finden.
Re: Pygame: Wasser-Effekt auf Teile eines Surface
Verfasst: Sonntag 30. November 2014, 15:53
von Ene Uran
Vielleicht kann man sowas anwenden:
Code: Alles auswählen
''' pg_LiquidImage1.py
PyGame liquid effect on a single image
'''
import pygame as pg
import math
pg.init()
# set width and height of pygame window
w = 600
h = 400
screen = pg.display.set_mode((w, h), pg.HWSURFACE|pg.DOUBLEBUF)
pg.display.set_caption('Animation of single image')
# load an image file you have
# if not in the working folder, add full path
image_file = 'PythonHand2.jpg'
bitmap = pg.image.load(image_file)
# optionally double the image size
bitmap = pg.transform.scale2x(bitmap)
# put image and screen into the same format
if screen.get_bitsize() == 8:
screen.set_palette(bitmap.get_palette())
else:
bitmap = bitmap.convert()
increment = 0.0
x_list = range(0, w, 10)
y_list = range(0, h, 10)
while True:
for event in pg.event.get():
if event.type == pg.QUIT:
pg.quit()
raise SystemExit
increment += 0.08
for x in x_list:
xpos = (x + (math.sin(increment + x*0.01)*15)) + 20
for y in y_list:
ypos = (y + (math.sin(increment + y*0.01)*15)) + 20
screen.blit(bitmap, (x, y), (xpos, ypos, 20, 20))
pg.display.flip()