ich sehe denn wald vor lauter bäumen nicht
-
hallo zusammen,
ich benötige einen sinnvollen lössungsansatz. mein prob ist ich habe eine outdoor terrain auf dem logischerweise auch bäume sind, bis hierhin kein problem, doch wie gehe ich besten vor wenn ich mehrere bäume machen zeichnen?
sollte ich 200* mal meine klasse initialisieren ?
m_pTree = new Model_3ds(); m_pTree->LoadModel(".\\data\\m_tree3.3ds"); m_pTree->SetPosition(Vector(50, 60, 50)); m_pTree->SetCollisionRadius(2.0f); // usw ...
allerdings würde er hierbei ja 200 mal den baum aus der datei laden was natürlich keinen sinn macht.
lange rede kurzer sinn wie macht ihr das wenn ihr ein objekt x*mal benötigt ?
-
Hi miller_m,
also ich verwende immer zwei getrennte Klassen - ein für die Objekt-Typen und eine für die konkreten Objekte des Spiels.
In deinem Fall hätte ich also 1 Objekttyp, in dem unter anderem auch das 3D-Modell gespeichert ist, und 200 Objekte, in denen dann nur ein Verweis auf den Objekttypen und natürlich sonstige Dinge wie Position etc. gespeichert sind.Dadurch vermeidest du Redundanz bei der Speicherung der aufwendigen 3D-Modelle...
Mfg, smasher1985
-
also ungefähr so:
class Objects { public: int m_vType; Vector m_vPos; // usw ... }; class Model : public Objects { public: // modeldaten wie texturen, materialien, vertexlisten usw ... };
sehe ich das richtig
-
Ich habe es nen bisschen anders verstanden. So wird ja von Model auch wieder jedes mal die Datei geladen wenn ich mich grad net irre. Mir fällt auch gerade so nichts ein wie es gehen soll. Vielleicht einfach nur nen Pointer auf das Model legen was in jedem Objekt dann auf das eine Model zeigt.
-
stimmt so wird jedes model auch wieder geladen.
ich habe nämlich smasher nicht so richtig verstanden ;), deswegen habe ich es so geschrieben wie es verstanden habe.
-
Das Modell wird nur einmal geladen und gespeichert. Die Bäume im Terrain bekommen jeweils eine Klasse oder struct mit Position, Drehung, vielleicht noch Bounding-Daten. Dann muss nur für jedes Objekt eine andere Weltmatrix gesetzt werden, gerendert wird aber immer das gleiche Modell.
-
ungefähr so:
// Klasse für Objekt-Typen class CGameObjectType { public: Model_3ds m_Model; // ... und weitere Attribute, die für alle Objekte gleich sind ... }; // Klasse für die konkreten Objekte class CGameObject { public: int m_nObjectTypeNr; // oder CGameObjectType *m_pObjectType; int nPos; // ... und weitere Attribute, die bei jedem Objekt anders sind ... }; // .. und schließlich noch zwei Strukturen zur Verwaltung ... std::vector<CGameObjectType> g_ObjectTypes; std::vector<CGameObject> g_Objects;
So, ich hoffe, es ist jetzt etwas klarer geworden
Mfg, smasher1985
-
danke ich werde es mir mal reinziehen ..... cy