[Assimp] Modell kopieren
Verfasst: 17.09.2009, 15:31
Hallo,
ich probiere zur Zeit Assimp aus und stehe vor folgendem Problem:
Ich möchte eine Klasse schreiben in der ich die benötigten OpenGL Routinen zum Zeichnen des Modells aufrufe. Mein Problem ist folgendes:
Im Konstruktor leses ich das Modell ein und setze einen Pointer drauf. Jetzt ist es logisch, dass beim verlassen des Konstruktor der Destruktor des eingelesenen Modells sich einschaltet und alles war umsonst.
Setze ich keinen Zeiger drauf, sondern kopiere ich es, werden die Zeiger die innerhalb der Klasse sind mitkopiert. Logisch ist, dass die Daten somit wiederum futsch sind, wenn sich der Konstruktor meiner Klasse beendet, da beide Zeiger auf den gleichen Speicher zeigen. Ich bräuchte also eine Tiefenkopie. Sowas liefert aber die Klasse nicht mit und selbst schreiben und alle Daten somit kopieren ist aufwendig und nicht umbedingt meine erste Wahl.
Hier mein Code um besser zu verstehen was ich meine:
Und die Klasse
Die Frage ist also, wie ihr das Problem lösen würdet oder löst. Ladet ihr alle Modelle global? Oder ladet ihr die immer vorm Zeichnen neu ein? Beide Sachen kann ich mir kaum vorstellen.
Gruß
chewbo
ich probiere zur Zeit Assimp aus und stehe vor folgendem Problem:
Ich möchte eine Klasse schreiben in der ich die benötigten OpenGL Routinen zum Zeichnen des Modells aufrufe. Mein Problem ist folgendes:
Im Konstruktor leses ich das Modell ein und setze einen Pointer drauf. Jetzt ist es logisch, dass beim verlassen des Konstruktor der Destruktor des eingelesenen Modells sich einschaltet und alles war umsonst.
Setze ich keinen Zeiger drauf, sondern kopiere ich es, werden die Zeiger die innerhalb der Klasse sind mitkopiert. Logisch ist, dass die Daten somit wiederum futsch sind, wenn sich der Konstruktor meiner Klasse beendet, da beide Zeiger auf den gleichen Speicher zeigen. Ich bräuchte also eine Tiefenkopie. Sowas liefert aber die Klasse nicht mit und selbst schreiben und alle Daten somit kopieren ist aufwendig und nicht umbedingt meine erste Wahl.
Hier mein Code um besser zu verstehen was ich meine:
Code: Alles auswählen
Model::Model(const std::string& pFile)
{
Assimp::Importer importer;
m_pAIScene=importer.ReadFile( pFile,
aiProcess_CalcTangentSpace |
aiProcess_Triangulate |
aiProcess_JoinIdenticalVertices |
aiProcess_SortByPType);
}
Code: Alles auswählen
class Model
{
private:
const aiScene* m_pAIScene;
public:
Model(const std::string& File);
~Model(void);
};
Gruß
chewbo