lib3ds meshes
-
Ich versuche gerade einen kleinen 3ds Max Loader mit Hilfe der lib3ds zu programmieren.
Ich hab mich erst einmal ein bisschem mit dem 3ds Format vertraut gemacht und ein bisschen durch den Source der lib3ds geblättert.
Zudem hab ich mir dieses Tut hier angesehen: http://www.donkerdump.nl/node/207, mit dem ich allerdings nichts anfangen konnte weil nichts so funktioniert hat wie dort beschrieben.
die Funktion lib3ds_file_load heißt bei mir zb lib3ds_file_open und mesh hat zb keinen next pointer etc..Nunja ich poste mal ein paar relevante Ausschnitte von meinem Code und komme dann zu meinem Problem:
MaxLoader::MaxLoader(std::string fName){ //lädt .3ds Datei mit allen Chunks this->model = lib3ds_file_open(fName.c_str()); if(!this->model) { cerr << "Konnte File " << fName << " nicht laden" << endl; } }
Weiters will ich nun die Meshes und die in den Meshes enthaltenen Faces laden. Die Faces beinhalten dann jeweils die 3 Vertices zum Zeichen.
this->model->meshes_size gibt die Anzahlt der enthaltenen Meshes zurück.
this->model->meshes gibt dann die Meshes als Lib3dsMesh ** zurück.
Ich war eigentlich schon weiter aber hier liegt dann auch schon mein Problem.
In meinem Fall hat mein 3ds Max Modell 32 Meshes. Daher hat es mich auch schon gewundert warum ich ein 2-dimensionalen Array bekomme (Lib3dsMesh **).
Nach etwas rumprobieren hab ich dann rausgefunden das ich ein 2xsize Array bekomm in meinem Fall ein 2x32 Array.
Nun frage ich mich welche Meshes brauche ich nun zum Auslesen der Faces und der darin enthaltenen Vertices?for(int i=0;i<32;i++) { for(int j=0;j<2;j++) { cout << "Mesh an stelle" << i << ":" << j << "hat" << mesh[j][i].nfaces << " Faces" << endl; } }
-
Daher hat es mich auch schon gewundert warum ich ein 2-dimensionalen Array bekomme (Lib3dsMesh **)
Das wird doch wohl eher ein Array aus Lib3dsMesh-Zeigern sein?
(Jeder Zeiger zeigt auf ein Mesh)
-
Oh das stimmt. Ich habe jz länger nur Java und PHP programmiert, da ist mir schon ganz entfallen, das ** auch einfach ein Array von Zeigern sein kann, was in dem Fall wohl so ist weil Lib3dsMesh eine Datenstruktur ist.
Es macht mich dann aber umso mehr stutzig warum ich ein 2x32 Array bekomme bzw welche Werte nun relevant sind.Lib3dsmesh **meshes = this->model->meshes
meshes[16] existiert nämlich nicht mehr.
sehr wohl aber meshes[0][16];
-
Und Du bist sicher, dass die Anzahl der Meshes in "meshes_size" und nicht vielleicht in "nmeshes" steht?