Pygame: Wasser-Effekt auf Teile eines Surface

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
ulrich1992
User
Beiträge: 42
Registriert: Montag 8. November 2010, 15:25
Wohnort: Braunschweig
Kontaktdaten:

Hallo!

Wie kann ich mit Pygame auf festgelegten Bereichen (Polygone) eines Surface einen Wasserwellen Effekt machen?
Benutzeravatar
Madmartigan
User
Beiträge: 200
Registriert: Donnerstag 18. Juli 2013, 07:59
Wohnort: Berlin

Deine Frage ist zu allgemein gefasst.
Was exakt meinst du mit "festgelegtem Bereich" und welche Art Effekt soll das werden?
ulrich1992
User
Beiträge: 42
Registriert: Montag 8. November 2010, 15:25
Wohnort: Braunschweig
Kontaktdaten:

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.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
Benutzeravatar
Madmartigan
User
Beiträge: 200
Registriert: Donnerstag 18. Juli 2013, 07:59
Wohnort: Berlin

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.
ulrich1992
User
Beiträge: 42
Registriert: Montag 8. November 2010, 15:25
Wohnort: Braunschweig
Kontaktdaten:

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?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

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()

Atomkraftwerkaktienbesitzer
Antworten