Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

03.04.2013, 20:13

[2D] Zeichenreihenfolge bei isometrischer Darstellung

Hi, ich glaube ich habe ein konzeptionelles Problem ^^ Ich arbeite an einer 2D Engine mit isometrischer Darstellung (ähnlich Age of Empires 1/2, Diablo 1/2, Anno 1602 uvm.). Dabei habe ich auf einer Karte:
  • Fußboden-Kacheln (z.B. Steinboden), über die wird alles andere drübergezeichnet
  • flache Objekte (z.B. Teleport-Bereich), kommt über den Boden aber unter die normalen Objekte
  • Wandkacheln (z.B. Felswand)
  • normale Objekte (z.B. Spielfigur)

Dabei habe ich die Kacheln in assoziativen Feldern angeordnet, als Key dient die Kachel-Koordinate. Jede Kachel enthält zusätzlich eine Liste von Objekten, die sich auf ihr befinden. Die Objekte "stehen" dabei prinzipiell auf genau einer Kachel (siehe Screenshots). Diese Liste wird beim Bewegen aktualisiert, so dass ich beim Zeichnen keine Objekte weiter suchen muss (sondern direkt habe).

Hier mal der Pseudo-Code zum Rendering-Vorgang:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Für jede sichtbare Zeile
    Für jede sichtbare Spalte
        Ermittle Fußbodenkachel
        Zeichne Kachel

Für jede sichtbare Zeile
    Für jede sichtbare Spalte
        Ermittle Fußbodenkachel
        Für jedes flache Objekt auf Kachel
            Zeichne Objekt

Für jede sichtbare Zeile
    Für jede sichtbare Spalte
        Ermittle Wandkachel
        Zeichne Kachel
        Für jedes normale Objekt auf Kachel
            Zeichne Objekt


Ich vermute bald, dass ich in

Quellcode

1
2
Für jedes flache Objekt auf Kachel
    Zeichne Objekt


eine Zeichenreihenfolge einbauen sollte. Nur fehlt mir dazu der Ansatz.

Ich habe hier noch ein paar Screenshots zusammengeschnitten, die mein aktuelles Problem zeigen. Die Grafiken sind von http://opengameart.org/ entnommen, also nicht meine.

Die Treppe im Bild hat als Bezugsecke (zum Rechnen) jene in der Mitte Unten (ist ja Iso, also um 45° gedreht). Nehme ich eine andere Bezugsecke habe ich ähnliche Probleme (dann ist meine Figur mal drüber obwohl sie drunter sein sollte). Zu sehen sind zwei Fälle wo es klappt und einige wo es nicht klappt. Die gesamte Treppe ist eine Grafik.

Habt ihr eine Idee?

LG Glocke :)
»Glocke« hat folgendes Bild angehängt:
  • example.jpg

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

2

03.04.2013, 21:28

Was naeher beim Betrachter ist, muss spaeter gezeichnet werden. (Painters Algorithm)

Da es Dinge geben kann, die sich ueberlappen, gibt es keine eindeutige Reihenfolge, in der gezeichnet werden muss.

3

03.04.2013, 21:34

Was naeher beim Betrachter ist, muss spaeter gezeichnet werden. (Painters Algorithm)

Da es Dinge geben kann, die sich ueberlappen, gibt es keine eindeutige Reihenfolge, in der gezeichnet werden muss.


Danke, aber das war mir schon bekannt ^^ Nur fehlt mir der Ansatz, wie ich das für meine übergroßen Objekte realisiere.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

03.04.2013, 21:36

Du nimmst die unterste Kante.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

5

03.04.2013, 21:36

Da es Dinge geben kann, die sich ueberlappen, gibt es keine eindeutige Reihenfolge, in der gezeichnet werden muss.

Evrey

Treue Seele

Beiträge: 245

Beruf: Weltherrscher

  • Private Nachricht senden

6

03.04.2013, 21:44

Du könntest theoretisch gesehen durch den Quellcode von Tiled luggen. Ziemlich tolles Teil, das auch Isometrie mit drölf Layern unterstützt.

C-/C++-Quelltext

1
2
3
4
int main(int _argc, char** _argv) noexcept {
  asm volatile("lock cmpxchg8b %eax");
  return 0;
} // ::main
(Dieses kleine Biest vermochte einst x86-Prozessoren lahm zu legen.)

=> Und er blogt unter Hackish.Codes D:

Werbeanzeige