Scenegraph - Erläuterung und Implementierung

Dev²
Verfügbare Informationen zu "Scenegraph - Erläuterung und Implementierung"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: kuroneko
  • Forum: Dev²
  • Forenbeschreibung: -= Code Games Or Die Trying =-
  • aus dem Unterforum: Allgemein
  • Antworten: 1
  • Forum gestartet am: Dienstag 22.05.2007
  • Sprache: deutsch
  • Link zum Originaltopic: Scenegraph - Erläuterung und Implementierung
  • Letzte Antwort: vor 16 Jahren, 11 Monaten, 24 Tagen, 17 Stunden, 18 Minuten
  • Alle Beiträge und Antworten zu "Scenegraph - Erläuterung und Implementierung"

    Re: Scenegraph - Erläuterung und Implementierung

    kuroneko - 22.05.2007, 23:16

    Scenegraph - Erläuterung und Implementierung
    Auf gehts mit dem SceneGraph.

    Was isn Scenegraph? Ein SceneGraph ist im Endeffekt nichts anderes als ein riesiger Baum, der alle Objekte des Spieluniversums (oder eines Teils des Spieluniversums) beinhaltet.

    Verdeutlichen wir das mal anhand von WoW:

    Der Rootknoten des Baums repräsentiert die gesamte Spielszene. Nehmen wir als Beispiel mal den Wald von Elwynn. Der Wald wird in WoW kaum jemals komplett gerendert werden, sondern in kleine verschiedene Stücke runtergebrochen werden. Also teilen wir den Wald von Elwynn in beispielsweise 32 kleinere Untersegmente auf, die wir behandeln wollen. Dazu adden wir an den Rootknoten 32 Childs.

    In diesen 32 Untersegmenten des Walds von Elwynn hätten wir jetzt z.B. ein Segment, das die Stadt Stormwind repräsentiert. Stormwind selber besteht zuallerst natürlch aus Häusern. Also adden wir an den Stormwind-Knoten sagen wir mal 100 weitere Kinderknoten. Diese 100 Kinderknoten repräsentieren also jeweils ein Haus. Ein Haus besteht nun natürlich auch aus mehreren Teilen, also adden wir einen Knoten fürs Dach, einen für die Aussenwände, und einen für die Möbel innen...langsam dürfte das Konzept dahinter klar sein, denk ich mal :)

    So, klingt erstmal aufwändig und langsam. Hat aber mehrere entscheidende Vorteile:

    #1 Alle Objekte der Spielwelt sind in einer Datenstruktur organisiert und in Beziehung zueinander gesetzt.

    #2 Einfacheres Rendern der Szene. Befinde ich mich mit meiner Spielfigur zB in Stormwind, so laufe ich einfach den Baum entlang bis zum Knoten Stormwind, und rendere alles was dadrunter liegt.

    #3 Einfachere und schnellere Kollisionsabfragen. In die einzelnen Nodes wird normalerweise zusätzlich zu dem Mesh und anderen Infos einfach ne BoundingBox dazugepackt, im einfachsten Beispiel nen Würfel. Will ich nun wissen, ob Objekt a) mit irgendwas in meiner Szene kollidiert, brauche ich nur noch die BoundingBoxen der einzelnen Nodes miteinander abgleichen. UND ich weiss natürlich, das alles was ÜBER dem abgefragten Node liegt, unmöglich mit ihm kollidieren kann. Spart Zeit und Aufwand.

    #4 Einfacheres Handling von Meshgruppen. Hab ich eins meiner Häuser geaddet, so kann ich z.B. nen Resize-Befehl auf das Haus absetzen, der je nach implementierung auch alle Objekte, die unter dem Node HAUS liegen betrifft. Resize ich also das Haus, resize ich auch das Dach, die Wnde, das Möbiliar. Sprich das ganze Haus, obwohls mehrere logisch voneinander getrennte Meshes sein mögen.
    Easy und praktisch.

    Nach allem was ich weiss, wird das so gut wie überall so gemacht. Erfordert natürlich erstmal Coding-Overhead, aber wenn das Ding einmal steht, wirds vergleichsweise bequem, seine Szene zu manipulieren und so weiter.


    Über die Implementierung müsste man sich dann im folgenden Gedanken machen. Gibt ne Menge Beispielimplementationen denke ich, aber wir sind ja nich aufn Kopp gefallen. Würde das Ding gerne klein und fix halten, ohne viel Schnickschnack den WIR nicht brauchen.



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Dev²

    Premultiplied Alpha - gepostet von kuroneko am Sonntag 27.05.2007



    Ähnliche Beiträge wie "Scenegraph - Erläuterung und Implementierung"

    Erläuterung des Hadisul Jariye - burningsufi (Mittwoch 22.06.2005)
    Erläuterung zum THEMA!! - pinkpunker (Donnerstag 06.10.2005)
    Erläuterung zur Bilderwand - Mel Gibson (Montag 14.02.2005)
    Erläuterung - Christian Slater (Freitag 25.02.2005)
    Der Kopf dieses Forums -nützliche Erläuterung für Einsteiger - Forum-Service (Dienstag 11.09.2007)
    Erläuterung - General L (Donnerstag 14.04.2005)
    Erläuterung - General L (Donnerstag 14.04.2005)
    Erläuterung - MuschiMa (Donnerstag 26.05.2005)
    Erläuterung - lenchen (Dienstag 04.10.2005)
    Erläuterung - lenchen (Dienstag 04.10.2005)