Wie kann ich mehrere Meshes laden?
-
Bin mir nicht ganz sicher, was Du genau willst, aber vielleicht kann ich ja helfen...
Du könntest Dir eine Klasse KugelObjekt erstellen, die einen Zeiger auf einen Mesh (die Kugel) und einen Index beinhaltet. Der Zeiger auf die Kugel ist "statisch", die Kugel muss ja nur einmal im Speicher vorliegen. Wenn Du nun auf Deinen Button klickst, wird ein neues Objekt von der Klasse KugelObjekt erstellt, der Index hochgezählt und im neuen Objekt der KugelObjekt Klasse gespeichert. Außerdem speicherst Du einen Zeiger auf Dein Objekt in einem std::vector.
Beim Rendern gehst Du nun in einer Schleife über jeden Eintrag und zeichnest dann halt so viele Kugeln, wie im std::vector gespeichert sind...allerdings rate ich Dir zu ein paar kleineren Übungen bevor Du Dich an Projekte dieser größe wagst - wenn Du nicht einmal mit diesem Problemchen fertig wirst...
-
Hallo
Ich habe nun mich mit dem Thema vectoren auseinandergesetzt. Doch nun, ich weiss nicht genau wie ich das programmieren soll, was iop geschrieben hat. Könntest du vielleicht ein kleines Codebeispiel zeigen, wie du das meinst?
Gruss Patrick
-
He
hm, mal schaun ob Dir folgendes hilft.. wie Du siehst, es ist nur ein Ansatz (übrigens kompilierbar) - wie Du alles verpackst, sortierst und designst musst Du Dir selbst überlegen. Einige Sachen wie zB den Meshzeiger und was dazu gehört habe ich auskommentiert, das wäre erstens zu viel Code gewesen für das Beispiel und zweitens musst Du wie gesagt selber wissen, ob und wie Du Deine Zeiger verpackst...
#include <iostream> #include <vector> class meineKugel { public: //Konstruktor, sollte natürlich auch einen Zeiger auf Deinen Mesh übergeben bekommen //Ob der jetzt in eine Klasse eingepackt ist oder nicht... das musst Du dann //selbst "designen" :) meineKugel(int _index){index = _index;}; void drawMe(){std::cout << index << std::endl;} private: int index; //mesh *zeigerAufMesh; //dann noch zB //matrix translateMat; //matrix rotateMat; //matrix scaleMat; //matrix comleteMat; }; int main() { //Der Zähler int index = 0; //Hier der Vector std::vector<meineKugel *> vec; //Das passiert jedesmal wenn auf den Knopf gedrückt wurde vec.push_back(new meineKugel(index/*, und natürlich der Zeiger auf den Mesh*/)); index++; //Das "rendern", hier zur Ansicht nur ne Standardausgabe.. size_t len = vec.size(); for(size_t i = 0; i < len; i++) vec[0]->drawMe(); std::cin.get(); return 0; }
Spass haben
-
Warum speicherst du Zeiger in dem Vektor? So hast du nämlich das Löschen der Kugel vergessen.
-
warum sollte man zeiger nicht in einem Vector speichern? Zum verwalten mehrerer Objekte is das doch i.o.
Nur wie heißt es so schön, "Wo ein Zeiger ist, ist hoffentlich auch ein Destruktor." Oder so ähnlich, habs vergessen.
Also natürlich sollten die Zeiger am Ende wieder aufgeräumt werden, aber darum gehts ja in dem Post nicht hauptsächlich, das sollte man auch so wissen, wenn man mit Zeigern hantiert.
size_t len = vec.size(); for(size_t i = 0; i < len; i++) SAFE_DELETE(vec[i]);
Dann musst Du in deinem Klassen objekt, im Destruktor, nur noch die Meshes und anderen kram freigeben.
-
KPC schrieb:
Warum speicherst du Zeiger in dem Vektor? So hast du nämlich das Löschen der Kugel vergessen.
el_presidente schrieb:
darum gehts ja in dem Post nicht hauptsächlich, das sollte man auch so wissen, wenn man mit Zeigern hantiert.
Ich dachte mir nur, dass Eglifisch1 das schon selbst merken müsste, wenn er die Sprache lernen will... das und noch einiges mehr, was auch nicht in meinem Post steht.
-
jo, da stimme ich Dir voll zu. Also man sollte wenigstens Grundkenntnisse in der Nutzung von Klassen haben.
Das is richtig. Wollte deinen Beitrag nur ergänzen ^^
-
Naja wenn ich einem Anfänger einen kurzen Beispielcode zeige, dann sollte der doch wenigstens korrekt sein. Die zwei Zeilen mehr hätten sicherlich nicht geschadet und es besteht nicht die Gefahr, dass jemand denkt man kann auf deletes verzichten, weil das Betriebssystem wird schon aufräumen.
Hätte der TE Ahnung von Klassen/Programmierung im Allgemeinen, dann gäb es jetzt sicherlich nicht diesen Thread.
-
Ich würde mal behaupten, dass ich kein Anfänger bin in C++. Ich habe meistens nur das Problem mit dem Umsetzen. Also mir fehlt eher die Erfahrung.
-
Eglifisch1 schrieb:
Ich würde mal behaupten, dass ich kein Anfänger bin in C++. Ich habe meistens nur das Problem mit dem Umsetzen. Also mir fehlt eher die Erfahrung.
erfahrung macht aus einem anfaenger einen profi
deine probleme klingen fuer mich irgendwie garnicht wirklich graphik bezogen, sondern der mangel an grundlegenem wissen, sodass sogar deine anfangsfrage nur erahnen laesst worauf du hinaus willst.
es waere also vielleicht von vorteil fuer dich, wenn du erstmal mit der sprache umgehen lernst anhand von einfachereren herausforderungen.ich wuerde das hier fast schon in den c++ bereich unseres forums verschieben.