Hi, im Delphi-Forum kam die Idee eines Lemming Klons auf (2D)
jetzt würde mich interessieren, wie man am besten so eine map aufbaut, die ja nicht unbedingt
aus quadraten besteht und zerstörbar ist. wie man am besten die kollisionsabfragen aufbaut, und
das ganze auf den bildschirm bringt (mit opengl).
der worms editor zb ist ziemlich genial, man zeichnet einfach mit nem brush und das programm sucht
passende texturen und objekte, das ist einfach der wahnsinn, wie funktioniert sowas ?
Wie das funktioniert kann ich leider nicht sagen. Drüben im Java Games Forum hatte einer beim 4K Contest einen Lemming Klon abgeliefert und seine Map mit Perling Noise generiert. Vielleicht geht das irgendwie in dem Zusammenhang
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3829 Wohnort: Tespe (nahe Hamburg)
Ja, das wird genauso funktionieren. Es wird (wurde) ja oft so gemacht, dass als Quelle für eine Heightmap ein Bitmap verwendet wird mit dem man dann etwas zeichnen konnte. Je weißer eine Stelle ist, desto höher wird sie interprettiert. Damit kann man dann Gimp als Map-Editor mißbrauchen. Ähnlich würde ich es auch in deinem Fall angehen. Momentan experimentiere ich bei einem Projekt mit einen Shader, der auf Grund von Farbwerten drei Texturen ineinander blendet. Den denke daran ein PNG/TGA kann getrost 4 Kanäle haben, so dass man den rot/grün/blau/alpha einzelend interpretieren kann und die Farbstufen dazwischen ebenfalls verwendet werden können.
Desweiteren gibt es einen OpenSource-Lemmingsklon, der IMAO Pingus hieß. Vielleicht hilft das auch weiter. Allerdings vermute ich, dass man dort eine andere Lösung gewählt hat.
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
In Worms ist es m.E so, dass eine BITmap (wirklich eine BITmap, also schwarzweiß) gezeichnet wird. alles, was weiß ist, ist landschaft. eine kollision wäre also auf per-pixel-basis realisierbar. Performantes Zeichnen wird schon schwieriger. Denkbar wäre:
1. eine mit der Bitmap maskierte, ggf gekachelte Textur auf einem Quad (die einfachste lösung und im Orthomodus theoretisch ohne Qualitätsverlust).
2. du läufst durch deine Bitmap (vorzugsweise übrigens in einem 2d-Array) und zeichnest bei jeder weißen stelle z.B mit GL_POINTS einen Punkt mit errechneter Farbe. Das Ergebnis speicherst du in eine Displaylist oder besser in ein statisches VBO.
Bei einer Explosion bewegst du dich in dein Array und setzt alles im Radius auf 0.
Dann Schritt 1 bzw. 2 mit der Änderung wiederholen.
gruß
_________________ I'm not the signature, I'm just cleaning the floor...
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Jetzt werdet mal bitte nicht komisch. Ihr habt nicht allen Ernstes vor durch ein Bitmap zu gehen und für jedes gesetzte Pixel einen GL_POINT zu zeichnen? Kleine Milchmädchenrechnung. 640x480 Bildpunkte und grob geschätzt wird die Hälfte nicht benutzt. Bleiben also noch 153.600 Punkte übrig. Das ist ein Aufwand der nicht unterschätzt werden sollte.
Wie wäre es, wenn ihr einen Alphakanal benutzt? Und diesen dann entweder in der Textur verändert um so stellen sichtbar oder unsichtbar erscheinen zu lassen oder als reine Alphatextur auf die 2te Textureinheit legt. Durch die Modulation könntet ihr so eine Maske und einen Alphakanal benutzen. Und getrennt davon behandeln. Dann hättet ihr lediglich noch ein Quad und alles wäre wesentlich performanter als mit POINTS. Sogar auf älterer Hardware.
die map wäre dann auf jedenfall immer 1 bild und das dazugehörige alpha bild ?
das finde ich sehr sinnvoll, dann hätte man das alpha bild, was genauso aussieht anfangs wie das andere, nur halt mit schwarz da wo der hintergrund ist und weiß da wo die objekte sind. und wenn was kaputt geht, wird einfach der alpha kanal verändert und das ganze dann über pixelabfragen, nur wir mache ich die dann Oo ?
und wie sollen sich figuren dort entlang bewegen, man müsste dann auch noch geschickt die steigung berechnen, also mir stellen sich da viele probleme Oo
Die Bitmap sollte im Speicher liegen. Allerdings wird eine 1bit Map kaumausreichen, da auch unzerstöhrbare und tödliche bereiche berücksichtigt werden wollen. Die map muss nach jeder änderung wieder zur Graka hochgeladen werden. Die Map nur in der Graka zu halten macht zwar beim ändern sinn, jedoch nicht für die lemminge, die ein wenig mehr intelligenz benötigen als man mit shadern sinvoll realisieren kann.
Teoretisch kann man nätürlich das ganze spiel mit shadern auf der Graka laufen lassen. Dann gäbe es neben den passiven Texturen die nur zur Anzeig gebraucht werden, die änderebare Map und ein Multiples Rendertarget (MRT) welches alle Lemminge enthält. Quasi eine Textur die 4,8,12 oder 16 Floats enhällt. Diese berschreiben, dann jeden Zustand eines Lemmings Ort(2D), Richtung(1D), Aktuelle aktion und dauer(2D) DIe intelligenz der fiecher umfasst dann genau die eines Pixelshaders (wirklich hirnlos). Die aktionen der Maus übergibt man dann am besten per Uniformvariablen. Das hauptprogram wird dann sehr Simpel im pseudo code:
Passive Texturen laden
Map laden
Lemmingstextur inialisieren (Alle in den Eingang, zustand warten mit countdown)
Levelschleife
. MRT für leminge binden
. MAusaktionen in Uniform variablen Speichern
. Shader für Lemminge anstoßen
. Rendertarget für Map binden
. Shader für Mapänderungen starten
. Kein Rendertarget binden (Backbuffer)
. Rendern
Schleife ende
die Limits ab der GF6 serie sollte soo unge fähr bei Levelgrößen von 4096x4096 und einigen tausend lemingen liegen..
Füher kommte man sich beim Speicher nder Levels nicht immer so viel Platz erlauben, so das diese Teilweise Blockbasierens waren.
Registriert: Mo Mai 29, 2006 21:13 Beiträge: 142 Wohnort: Ballenstedt/Sachsen-Anhalt
Also, nachdem ich eure Diskussion hier verfolgt hab, hab ich auch mal was gebastelt.
Mit der Maus kann man Terrain zerstören, das Wasser ist als Bad markiert (würde ein Spieler drauf fallen, wäre er tot). Dait ist es auch nicht zerstörbar.
Als Level wird eine TGA-Grafik benutzt, deren Alpha-Kanal die Bereichskennzeichnungen übernimmt. Dazu gibt es auch einen Editor, weil bie GIMP anscheinend 50 % Transparenz nicht $7F sind, sondern $59
Mitglieder in diesem Forum: Bing [Bot] und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.