Hallo, ich habe ein eher ungewöhnliches Problem mit animierten Objekten, dass mir unabhängig von der Programmiersprache zu sein scheint: In einer View-Ebene animiere ich Wolken unterschiedlicher Größe und Geschwindigkeit. Die Wolken bewegen sich alle in die selbe Richtung und Treten nach Verlassen des Viewports einfach auf der gegenüberliegenden Seite wieder in die View ein. Kleine Wolken sollen weiter entfernt erscheinen und bewegen sich dementsprechend langsam über die X-Achse. Größere Wolken sollen näher zum Betrachter hin erscheinen und bewegen sich daher schneller über die X-Achse. Die Objekte verteile ich über X/Y-Koordinaten auf der View und berechne dann dynamisch die zwei Teil-Strecken und -Zeiträume(einmal von den Start-Koordinaten bis zum Verlassen der View und dann auf der gegenüberliegenden Seite vom Wiedereintritt in die View bis zum Erreichen der Start-Koordinaten. Dort wiederholt sich die Animation dann.). Das funktioniert auch soweit und sieht direkt nach dem Start der Animation auch ausreichend realistisch aus. Das Problem: Es gibt durch die unterschiedlichen Geschwindigkeiten der Wolken immer wieder mal ein "Zusammentreffen" mehrerer oder sogar aller Wolken, vergleichbar mit der Planeten-Konjunktion in der Astronomie bzw. so etwas wie eine Interferenz der Animations-Objekte. Was ist hier die sinnvollste Lösung, um derartige "Konjunktionen" zu verhindern oder zumindest zu minimieren, wenn die Geschwindigkeit der einzelnen Wolken für den Betrachter nahezu konstant erscheinen soll? Gibt es eine Formel oder ein Programm, mit dem man derartige Konjunktionen vorhersagen bzw. minimieren kann? Je länger es bis zur Konjunktion dauert, desto besser...ich hatte mir schon überlegt, die Wolken auf einen identischen X-Wert zu legen und dann die Animation so lange laufen zu lassen, bis die Wolken weit genug auseinander sind und diese gemessenen Werte dann als optimale Start-Werte zu benutzen. Diese Werte gelten dann aber wohl nur für eine Auflösung... Oder gibt es Algorithmen, mit denen man diese Konjunktionen generell verhindern kann? Ich überlege gerade, ob es mit einer größeren Menge an animierten Wolken besser funktioniert, wenn man immer nur eine variierende kleine Auswahl an Sprites animiert, bei der die Geschwindigkeiten so gewählt sind, dass keine Konjunktions-Gefahr droht. Viele Grüße, Jumbo
Jumbo schrieb: > Was ist hier die sinnvollste Lösung, um derartige "Konjunktionen" zu > verhindern oder zumindest zu minimieren Wozu verhindern? Du brauchst 2 Dinge * zum einen darfst du nur das Innere einer Wolke malen. D.h. wenn du eine Bitmap für die Wolke hinzeichnest, dann dürfen auch wirklich nur die Pixel gesetzt werden, die zur Wolke gehören und nicht die eines Himmels. Jedes bessere Malprogramm kann Pixel auf 'keine Farbe' setzen. Und genau das brauchst du auch hier: Du willst beim Hinmalen tatsächlich nur die Pixel setzen, die zur Wolke gehören und nur diese. * Reihenfolge: malst du deine Wolken beim Bildaufbau eines Teilbildes der Animation von 'hinten nach vorne' dann überdecken automatisch im Vordergrund liegende Wolken die hinteren. Die gleiten dann in der Animation automatisch korrekt über die dahinter liegenden drüber. Das ganze ist als "Painter-Algorithmus" bekannt und viele Spiele, wie zb. SimCity beruhen darauf, dass beim Aufbau eines neuen Bildes einer Sequenz nicht einfach Objekte in wahlloser Reihenfolge gemalt werden, sondern dass der Bildaufbau von hinten nach vorne erfolgt (zuerst die entfernten und dann die jeweils näher am Betrachter liegenden). Langer Rede kurzer Sinn: Du willst derartige Kollisionen gar nicht weg haben. Ganz im Gegenteil sind sie ein wichtiger Aspekt um einem Benutzer eine räumliche Tiefe vorzugaukeln. Ohne derartige Überdeckungen sieht er einen Haufen unterschiedlich großer Wolken über den Himmel ziehen. Erst die Verdeckung gibt seinem Gehirn den Hinweis, dass die eine Wolke tatsächlich näher ist als die andere und die scheinbar unterschiedliche sichtbare Größe der unterschiedlichen Entfernung geschuldet ist. Daher: behandle das einfach richtig und du hast mehr davon.
:
Bearbeitet durch User
Wenn aber eine kleine schnelle Wolke schneller akltuallisiert werden um nicht so große Sprünge zu haben benutzt du halt die Objektkollision und das Objekt mit dem größeren oder kleinerm Z-Wert gewinnt (natürlich muß jede Wokke bei erzeugung nen Z-Wert bekommen in welcher Ebene Sie schwebt).
Hallo, ich glaube ihr habt mein Problem falsch verstanden...ich benutze bereits Grafiken mit transparentem Hintergrund und habe für die Wolken separate Subviews in einer bestimmten Reihenfolge erstellt, damit die perspektivische Überlagerung korrekt ist. Mein Problem besteht doch nur darin, dass sich die Wolken durch die unterschiedlichen Geschwindigkeiten nicht nur einfach überholen, sondern sich durch die konstanten Loop-Zeiträume irgendwann für kurze Zeit alle am selben X-Wert befinden. Und das sieht dann eben extrem unnatürlich aus, wenn 10 Wolken ein senkrechte Linie bilden und der restliche Himmel klar ist. Klar, das geht wieder vorbei, aber es passiert auch mit Teilmengen: es sind auch mal nur 5 Wolken am gleichen Platz, sieht aber trotzdem doof aus. Vielleicht sollte ich dazu sagen, dass ich keine flächige Wolken-Decke animiere, sondern einzelne Cumulus-Wolken. Da wirkt es unnatürlich wenn mehrere Wolken an einem Punkt versammelt sind. Man könnte es auch mit Vögeln erklären: Stellt euch den Bildschirm in 10 Reihen unterteilt vor, in jeder Reihe sitzt ganz links ein Vogel. Jetzt fliegen die Vögel gleichzeitig, aber mit unterschiedlichen Geschwindigkeiten los. Verschwindet ein Vogel am rechten Bildschirmrand, taucht er direkt danach am linken Bildschirmrand auf gleicher Höhe wieder auf. Irgendwann werden alle Vögel eine vertikale Linie bilden, weil sie sich auf der gleichen horizintalen Position befinden. Und genau das möchte ich irgendwie verhindern. Die Vögel bzw. die Wolken sollen möglichst gleichmäßig verteilt fliegen, aber eben mit unterschiedlichen Geschwindigkeiten. Viele Grüße, Jumbo
Jumbo schrieb: > Mein Problem besteht doch nur darin, dass sich die Wolken durch die > unterschiedlichen Geschwindigkeiten nicht nur einfach überholen, sondern > sich durch die konstanten Loop-Zeiträume irgendwann für kurze Zeit alle > am selben X-Wert befinden. Und das sieht dann eben extrem unnatürlich > aus, wenn 10 Wolken ein senkrechte Linie bilden und der restliche Himmel > klar ist. Ah. ok. Ich dachte du hättest ein technisches Problem. Das ist dann nicht klar rüber gekommen. Tja. Da wirst du dir was ausdenken müssen. Wenn 20 Autos in einer Linie aufgereiht sind und alle gleich schnell an dir vorbei fahren, dann gibt es natürlich einen Punkt, an dem sich die Autos alle überdecken. Sieht man auch bei jeder Militärparade. Warum ist das dann in der Natur eher selten der Fall? Weil Wolken eben nicht alle gleich schnell ziehen. D.h. gib deine strenge Umrechnung der Geschwindigkeit in die perspektivische Tiefe auf bzw. lass kleine Variationen zu bzw. lass Wolken zwischendurch auch mal ein wenig schneller oder langsamer fliegen. Was du da beschrieben hast, was du da alles berechnest, kommt mir sowieso etwas zu kompliziert vor. > Jetzt fliegen die Vögel gleichzeitig, aber mit unterschiedlichen > Geschwindigkeiten los. Verschwindet ein Vogel am rechten Bildschirmrand, > taucht er direkt danach am linken Bildschirmrand auf gleicher Höhe > wieder auf. Irgendwann werden alle Vögel eine vertikale Linie bilden, > weil sie sich auf der gleichen horizintalen Position befinden. Und > genau das möchte ich irgendwie verhindern. Solange jeder Vogel für sich immer die gleiche Geschwindigkeit fliegt, lässt sich das auch nicht verhindern. Ansonsten musst du 3000 Jahre zurück gehen und die Mathematik ändern. Zu 2 (oder n) beliebigen Zahlen, gibt es immer eine andere Zahl, so dass jede einzelne der Zahlen ganzzahlig darin enthalten ist. Bei 2 Zahlen nennt man das das kgV, das kleinste gemeinsame Vielfache.
:
Bearbeitet durch User
Andere Möglichkeit. Ist eine Wolke am rechten Rand angelangt, dann startet sie nicht sofort wieder von links, sondern legt eine zufallsgesteuerte Pause ein, ehe sie wieder von links reinkommt, mit einer eventuell etwas höheren oder niedrigeren Geschwindigkeit als sie anhand ihres Tiefenwertes und der generellen Geschwindigkeit der Wolkendecke eigentlich haben sollte.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.