Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jan 29, 2023 13:08

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 31 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Map im Lemmings / Worms Style
BeitragVerfasst: Di Aug 01, 2006 19:52 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
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 ?


mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 02, 2006 08:58 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 03, 2002 15:08
Beiträge: 662
Wohnort: Hamburg
Programmiersprache: Java, C# (,PhP)
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 ;)

_________________
(\__/)
(='.'=)
(")_(")


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 02, 2006 10:08 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3819
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..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 02, 2006 10:16 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
sowas dachte ich mir auch, nur wie zeichne ich das mit opengl, und vor allem wie zeichne ich das, wenn teile zerstört werden etc ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 02, 2006 11:14 
Offline
DGL Member
Benutzeravatar

Registriert: So Okt 26, 2003 20:07
Beiträge: 249
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...

Derzeitiges Projekt:
FireBlade Particle Engine (Release R2 2009.06.29)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 02, 2006 11:20 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
ja, so könnte man das ganze vielleicht sogar recht performant umsetzen. ich bin nur nicht auf die idee mit den punkten gekommen ^^


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 02, 2006 11:36 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 02, 2006 11:39 
Offline
DGL Member
Benutzeravatar

Registriert: So Okt 26, 2003 20:07
Beiträge: 249
@Lossy

genau das meine ich in 1. :)

_________________
I'm not the signature, I'm just cleaning the floor...

Derzeitiges Projekt:
FireBlade Particle Engine (Release R2 2009.06.29)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 02, 2006 11:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ähm. Okay. :roll:

Aber Pixel mit einzelnen Points zu zeichnen halt ich für gar keine gute Idee.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 02, 2006 12:26 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 02, 2006 13:25 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 02, 2006 15:46 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
ich glaube das wäre eher was für freaks :lol:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 02, 2006 18:34 
Offline
DGL Member

Registriert: Di Apr 04, 2006 19:47
Beiträge: 28
in der DP gib es ein Projekt CrashPoint http://www.delphipraxis.net/topic88084_2d+bitmap+und+boundingboxes.html&highlight=recheck
da geht es um einen algo der eine beliebige fom in rechtecke unterteilt, das wäre ein guter weg (so wie da im bild des zweiten posts)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 03, 2006 11:58 
Offline
DGL Member
Benutzeravatar

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

Zu finden hier: http://underbyte.ath.cx:230/OpenGL/Prog ... /Worms.zip

Kann es sein, dass die Attachment-Funktion des Forums streikt? Eigentlich sollte es noch einen Screen geben, aber so....

Wie eingangs gesagt, das ist nur eine schnell hingehackte Lösung, also nicht über den Programmierstil wundern.

Das mitden Kollisionen kriegt man auch noch irgendwie hin. Aber nicht auf der Codebasis, das ist nur eine Techdemo.

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 03, 2006 13:00 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
wow, das ist wirklich sehr nett von dir, in diesem fall hast du einfach 50% transparenz für unzerstörbare objekte genommen ? guter einfall ;)


leider fehlen mir ein paar units um das kompilieren zu können ^^


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 31 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.047s | 17 Queries | GZIP : On ]