Frage zu einer Klasse
-
Hallo an alle,
ich habe im Internet folgende Klasse gefunden:
class Mesh { struct Triangle { int a,b,c; }; struct Quad { int a,b,c,d; }; private: Triangle *triangles; Quad *quads; Vector3f *vertices; Vector2f *texcoords; };Leider blicke ich da nicht so durch, was macht z. B. das Triangle *triangles? Es hat was mit 3d-daten zu tun.
Dann noch eine Frage, wie greife ich auf diese Klasse zu, es lag weder ne beschreibung noch sonst irgendwas bei bei der klasse. könnt ihr mir den aufbau dieser klasse mal mehr erklären?
ich wollte die klasse um eine schnittstelle erweitern damit ich sie mit daten füllen kann, aber wenn ich nicht verstehe was Quad *quads und Triangle *triagles macht ist das natürlich schwierig.
ich hoffe ihr könnt mir mal auf die sprünge helfen
gruß
sebastian
-
triangles und quads sind jeweils Zeiger auf Objekte vom Type Triangle und Quad, die ja direkt darüber definiert werden.
Du könntest jetzt beispielsweise triangles=new Triangle; bzw. da es im Plural steht, wohl eher triangles=new Triangle[triangle_count]; und dann mit triangles->a bzw. triangles[x].a... auf die Elemente zugreifen.
Ich würde mir trotzdem noch mal die Zeigerthematik anschauen, bevor ich weitermache.
-
Ok ich hab mal versucht den Privaten Teil der Klasse für C++ umzuschreiben, das müsste ungefähr so aussehen:
vector<Triangle> triangles; vector<Quad> quads; vector<Vector3f> vertices; vector<Vector2f> texcoords;hätte das jetzt irgendwelche vorteile wenn ich Vektoren anstatt Objekte benutze? Falls ja, welche vorteile bietet mir das ganz und wie greife ich dann dort auf die stukturen zu?
Ok wenn du wie du gesagt hast ich bei den objekten mit dem pfeiloperator zugreifen kann dann erinnert mich das etwas an normale strutkturen bei C. Damit habe ich früher mal zutun gehabt, aber nicht in diese Dimension.
-
Ein Vektor ist lediglich ein Container für die Objekte, der große Vorteil ist dabei, dass du dich nicht mehr um die Speicherverwaltung der einzelnen Objekte und auch nicht für die des Containers selbst (wenn man Elemente hinzufügt) kümmern musst. Auf die Elemente eines Vektors kannst du ebenfalls mit triangles[x]... zugreifen.
-
Aha das ist ja toll. Da schlägt das Herz wieder höher, wenn Vektoren den Speicher selbst verwalten. Ich kann also ganz normal drauf zugreifen? Das ist ja ne schön sache wenn ich über triangles[i].a auslesen kann