Wie am besten diese Daten verwalten?
-
Hallo,
ich hab ein Datenformat in dem 3d-Scheitelpunkte (jeweils doubles) vorkommen und polygone (3 oder 4-eckig, je nach situation). des weiteren gibt es noch uv koordinaten, also texture koordinaten, die sind aber nicht fest, es kommt auf die größe des polygones an, wie viele es davon gibt.
Bsp:
Den Faces sind Scheitelpunkte zugeordnet, also aus welchen Punkten das Face eigentlich besteht.
Hier mal ein Paar Beispieldaten:
Polygone: 1
Name des Polygones: T_G_MARK23_R
Das Polygone besteht aus folgenden Scheitelpunkten:
Vertice 0 = 3 [-223.458; 188.55; 62.1279]
Vertice 1 = 5 [-173.435; 188.55; 62.1279]
Vertice 2 = 4 [-173.435; 229.937; 62.1279]
Vertice 3 = 0 [-223.458; 229.937; 62.1279]
Die Oberfläche ist: TEXGOU und die Texture-ID ist: 4
Überblick über die UVW Koordinaten:
UVW 0 = 128
UVW 1 = 0
UVW 2 = 128
UVW 3 = 127
UVW 4 = 255
UVW 5 = 127
UVW 6 = 255
UVW 7 = 0
Die Oberfläche hat folgende Eigenschaften: 9Wie soll ich sowas verwalten? Hab bislang wenig mit Speicherprogrammierung gearbeitet. Wie würdet Ihr diese Daten speichern, damit Sie schnell zu laden sind (also aus dem Speicher)
Ich möchte nicht gerne für jedes ne extra variable oder array anlegen, da das dann unübersichtlich wird.
also wie das ganze im speicher verwalten?
gruß und danke
sebastian
-
Ich würde zwei std::vector für die Eckpunkte (hier könnte auch ein Array reichen) und die UV-Koordinaten verwenden.
-
oh hoppla hab grade gesehen, das noch die oberflächeneigenschaften nicht erwähnt wurden und die texture ID. die sollen natürlich mit den namen im speicher gehalten werden.
kannst du das ganze an einem beispiel zeigen wie du das verwalten würdest?
-
Sebastian848 schrieb:
oh hoppla hab grade gesehen, das noch die oberflächeneigenschaften nicht erwähnt wurden und die texture ID. die sollen natürlich mit den namen im speicher gehalten werden.
Die ID könnte ein int sein, Name ein String und Oberflächentyp entweder String oder Enum (wieviele mögliche Typen gibt es denn hier?):
struct face { string name; vector<point> vertices; enum FaceType {...}; FaceType type;//alternativ 'string type' int id; vector<int> uvw; //erweiterbar, falls du noch etwas brauchst };
-
Hallo nochmal,
ich hab grade per email von einem delphi programmierer diese nachricht erhalten:
ich weiß cpp hat nicht all zu viel mit delphi zu tun, aber lest euch das bitte mal durch, ich würde gerne mal wissen wie ihr das findet und ob das in cpp auch umsetzbar wäre:
Klasse TPolygone und TVertice, sowie TUV zu bauen. Innerhalb einer TPolygone Instanz würde ich dann jeweils eine TObjectList Vertices und UVs anlegen, die als Container für die entsprechenden Instanzen dient. Die anderen Dinge wie Name des Polygones und Texture würde ich als Property direkt in TPolygone anlegen.
Mehrere Polygone kannst du dann wieder mit einer externen TObjectList relative leicht verwalten.
TVertice enthält die (x,y,z)-Koordinaten. TUV, so wie es aussieht, nur eine Zahl. Aber um flexibel zu bleiben würd ich trotzdem eine eigene Klasse dafür definieren.
Der TPolygone Klasse kannst du dann noch statische Load Methode spendieren, um Daten zu laden, sowie eine Save Methode um sie zu speichern. Das Format lass ich jetzt mal aussen vor.
Dann noch ein paar Methoden um neue Vertices in einem Polygone zu erstellen (AddVertice). Für AddUV analog.
-
Jo, würde sagen, das ließe sich umsetzen

-
Hallo,
ich nochmal, ich habe versucht das umzusetzen jedoch kapiere ich das noch nicht recht, wie kann ich sozusagen mehrere klassen verbinden? denn ein Objekt würde in dem fall auch aus mehreren klassen bestehen, siehe beschreibung.
könnt ihr mir bitte helfen wie das genau gemeint ist was er mir da per mail geschrieben hat? denn in delphi scheint es etwas anderes zu sein als in cpp.
ich wäre euch sehr dankbar und verbunden wenn ihr mir die klasse nur mal probeweise aufsetzen könntet damit ich verstehe wie das gemeint ist.
und ja ich hab schon objektorientiert gearbeitet aber noch nicht auf diesen niveau.
vielen dank im voraus
-
Du kannst in C++ auch Member (beliebiger Datentypen) in deine Klassen einklinken - also auch ein Polypon in einer größeren Klasse. Um mehrere gleichartige Elemente zusammenzufassen, solltest du die STL-Container verwenden (siehe dazu das Code-Fragment, das ich oben angegeben habe).
(eventuell kannst du das noch weiter unterteilen)
-
Aha ist ja interessant, das wusste ich z. B. nicht das ich auch auf andere Klassen verlinken kann. Kannst du mir ein gutes Tutorial empfehlen wo ich das verlinken sehen kann? Am besten wäre es natürlich wenn man das Objekt so verwaltet das es einfach zugänglich ist, sozusagen in einem Rutsch, das gut in der Handhabung ist.
Wäre dir nochmals sehr verbunden wenn du mir das mit der Klasse auf eine andere Klasse an einen klitzekleinen Beispiel erläutern könntest, oder gib mir bitte ein Tutorial wo ich das nochmal lesen kann.
Habe bislang leider nur Tutorials mit Basisklassen gefunden, die ja sehr einfach in der Handhabung sind.
-
Das hat nichts mit "Verlinken" zu tun, das ist eine ganz normale Komposition.
Eine Klasse hat Member - und diese können alles sein, was bereits vollständig definiert wurde (auch andere Klassen). Sowas sollte eigentlich in jedem vernünftigen C++ Buch erklärt werden.