Wohin mit den Geometriedaten?



  • Guten Abend,
    ich verstehe nicht ganz genau den Ablauf bei Spielen (oder generell bei 3D Anwendungen) in Bezug auf das Verweilen der Geometrie- der Shader- oder der Texturdateien in denselben.
    Damit ist gemeint: Welche Klasse sollte diese Dateien enthalten?
    Ich dachte immer das die Klasse "OBJECT", von der alle sichtbaren Objecte im Spiel abstammen diese Daten enthalten muss.
    Also z.B. OBJECT box.loadGeometry(string Filename).

    Als ich aber angefangen habe das zu programmieren bin ich ins Grübbeln gekommen
    da jedes Object einen großen Ballast mit sich schleppt, nähmlich die ganze io Geschichte um von einer Datei die daten auszulesen. Wenn ich jetzt 1000 Bäume darstellen möchte muss ich 1000 mal speicher für die io Klassen mit reservieren oder zumindest für deren Zeiger.

    Mein zweiter Ansatz ist, alle Daten die ich für ein Level zum Beispiel brauche in eine Grosse Liste oder Map in den RAM speicher zu lesen und dann lasse ich die Objecte Ihre benötigten Daten von der Liste über die addresse abholen sozusagen. (Irgendwie noch nicht ganz ausgereift die Idee).
    Ist die Sichtweise überhaupt richtig das die Objekte selbst ihre Daten besitzen und verwalten oder bin ich da auf dem falschen Ast.

    Vielleicht kennt sich ja jemand damit aus und hat schon mal eine engine oder ein Spiel programmiert, ich bin für jede Hilfe dankbar.

    Gruß.



  • Wie Du ja selbst schon festgestellt hast gibt es viele moegliche Umsetzungen.
    Welche davon fuer Dich am geeignetsten ist kommt darauf an was Du tun willst.
    In Hinblick auf OOP kann es durchaus sinnvoll sein wenn sich jedes Objekt aus einem "Datenstrom" laden kann.
    Ob jedes sichtbare Objekt auch "Geometrie" enthalten muss ist situationsabhaengig.
    1000x den gleichen Baum zu laden ist sehr wahrscheinlich nicht sinnvoll.



  • Der Begriff "laden" ist hier etwas zweideutig.

    In der ersteren Variante geht es darum das jedes Object sich seine Daten aus einer physikalischen datei (z.B.Textdatei)einliest. Rein OOP wäre das ja der richtige Weg, da ja jedes Object sich selbst verwalten sollte und alle zum Object gehörenden daten beinhalten muss.

    In der zweiten Möglichkeit will ich alle Physikalischen Dateien vorher laden, mithilfe einer anderen Klasse, und dann die virtuellen Dateien (RAM) den Objecten bei Erzeugung zuordnen.

    @hellihjb: hast du denn soetwas schon mal gemacht? wie hast du es gelöst?



  • hat hier wirklich keiner mehr ein Rat, es sind hier doch schon soviele engines geschrieben worden - was waren euere Ansätze bei diesem Punkt.



  • Stell doch mal eine konkretere Frage.
    Zum "Lesen aus Dateien" wird Dir wohl niemand eine ueberraschend clevere Idee vorstellen...



  • wer sollte das laden der Geometrie - und aller sonstigen zum 3dObject gehörenden Dateien übernehmen - das Object selbst oder irgendeine andere Klasse?

    Wenn es das Object selbst macht - was passiert wenn ich zum Beispiel im Spiel ein neues Object erzeuge. (Bei Strategiespielen eine neue Einheit)
    Dann muss im mitten im Spiel eventuell eine menge Daten von der Platte gelesen werden.
    Deswegen gibt es da ja auch diesen LadeBalken vor dem Start des Levels.
    Also muss doch alles vor dem Start geladen werden. Wenn ich aber schon alles in vorraus lade kann es doch aber sein das der Spieler nie einen Panzer bauen wird und ich habe umsonst 2 sec länger gewartet.

    Kurz gesagt möchte ich keine Antwort auf eine bestimmte Frage sondern einen Ansatz. Wie machen es die Profis, welchen Weg geht man da.



  • Eine moegliche Loesung waere zB ein Geometrie-Pool.
    Wenn Du ein Mesh erzeugen willst dessen Geometrie-Daten bereits existieren, kannst Du einfach darauf referenzieren.
    Das gleiche bietet sich fuer Texturen an.
    Ob Du das Laden dann on-the-fly machst kommt auf die Komplexitaet Deiner Daten an, ob Du die gesamte Menge im Speicher halten kannst und ob Du ueberhaupt im Vorfeld weisst welche Daten benoetigt werden.


Anmelden zum Antworten