I
@TGGC
Naja, als Selbstmord würde ich es nicht bezeichnen. Der mp3 Decoder empfand ich bspw. als deutlich schwieriger als der 3ds Decoder. Also für den kompletten Importer (nur Meshes inkl. Submeshes, Berechnung des Tangentspace fürs Normalmapping und Gruppierung nach Material benötigte ich weniger als 500 Zeilen Code, wärendessen der Mp3 Decoder... Puuh..... :-p
Aber OK, was tatsächlich mühsam ist, ist dass die Daten einfach völlig anders abgespeichert sind, als ich sie benötigte. Meine Mesh klasse hat einen Vertex und einen IndexBuffer sowie mehrere Meshparts:
// ****************************************** struct "MeshPart" ******************************************
// This structure defines the data needed for rendering a part of a mesh.
// Author: Samuel Lörtscher
// *******************************************************************************************************
struct MeshPart{
// --------------------------------------- public dynamic members ---------------------------------------
uint32 MinVertex; // the minimal vertex used within tis mesh part
uint32 Offset; // the offset of the first triangle using this mesh part (zero indexed)
uint32 Count; // the number of triangles using this mesh part
ITextureResource *Diffuse; // the diffuse map
ITextureResource *Normal; // the normal map
ITextureResource *Specular; // the specular map
ITextureResource *Reflection; // the reflection map
// ------------------------------------------------------------------------------------------------------
// ------------------------------------- constructors and destructor ------------------------------------
MeshPart(void);
MeshPart(uint32 MinVertex,uint32 Offset,uint32 Count);
~MeshPart(void){}
// ------------------------------------------------------------------------------------------------------
};
// *******************************************************************************************************
Problematisch war am Anfang, dass ich nicht wusste, wie gross ich den Vertex- bzw. Indexbuffer machen soll, da in keinem Headerjunk drinnsteht, wieviele Triangles das Teil denn nun hat (Es kann ja beliebig viele Vertexlist junks haben). Dieses Problem habe ich schliesslich mit einem Preparsing Step gelöst. Nicht sonderlich schwierig aber einfach MÜÜHSAM war, dass einfach willkürlich gewisse Faces ein anderes Material benutzen.