2017-10-17 16 views
1

Ich habe einige 3D-Modell in meinem Format und möchte sie zu Standardformaten ändern und sie in meinem Projekt verwenden, so begann ich Assimp Bibliothek zu verwenden. Mein Code für erstellen aiScene ist:Assimp Import Export Format Fehler

const aiScene* GenerateScene(int NumberOftexture, float *texture, int NumberOfVertex, double *verftex, int NumberOftri, double *tri) { 

MATFile *pmat; 
const char **dir; 
const char *name; 
int ndir; 
int i; 
aiScene* scene=new aiScene(); 

scene->mRootNode = new aiNode(); 


scene->mMaterials = new aiMaterial*[1]; 
scene->mMaterials[0] = nullptr; 
scene->mNumMaterials = 1; 

scene->mMaterials[0] = new aiMaterial(); 

scene->mMeshes = new aiMesh*[1]; 
scene->mMeshes[0] = nullptr; 
scene->mNumMeshes = 1; 
scene->mMeshes[0] = new aiMesh(); 
scene->mMeshes[0]->mMaterialIndex = 0; 
scene->mRootNode->mMeshes = new unsigned int[1]; 
scene->mRootNode->mMeshes[0] = 0; 
scene->mRootNode->mNumMeshes = 1; 

auto pMesh = scene->mMeshes[0]; 

pMesh->mTextureCoords[0] = new aiVector3D[NumberOftexture]; 
pMesh->mNumUVComponents[0] = NumberOftexture; 
for (int i = 0; i < NumberOftexture; i++) 
    pMesh->mTextureCoords[0][i] = aiVector3D(texture[i], (float)texture[i + NumberOftexture], (float)texture[i + 2 * NumberOftexture]); 

pMesh->mVertices = new aiVector3D[NumberOfVertex]; 
pMesh->mNumVertices = NumberOfVertex; 
for (int i = 0; i < NumberOfVertex; i++) 
    pMesh->mVertices[i] = aiVector3D((float)verftex[i], (float)verftex[i + NumberOfVertex], (float)verftex[i + 2 * NumberOfVertex]); 

pMesh->mFaces = new aiFace[NumberOftri]; 
pMesh->mNumFaces = NumberOftri; 

for (int i = 0; i < NumberOftri;i++) { 
    aiFace& face = pMesh->mFaces[i]; 
    face.mIndices = new unsigned int[3]; 
    face.mNumIndices = 3; 
    face.mIndices[0] = (int)tri[i]; 
    face.mIndices[1] = (int)tri[i + NumberOftri]; 
    face.mIndices[2] = (int)tri[i + 2* NumberOftri]; 
} 

aiExportScene(scene, "collada", "D:\\myColladaFile.dae", 0); 

return scene;} 

Es läuft richtig, aber wenn ich Datei mit Assimp Bibliothek öffnen werde ich bekam Fehler. Mein Import-Code ist

scene = aiImportFile(path, aiProcessPreset_TargetRealtime_MaxQuality);

und ich bekam Fehler:

Info, T10040: Load D:\myColladaFile.dae 
Info, T10040: Found a matching importer for this file format: Collada Importer. 
Info, T10040: Import root directory is 'D:\' 
Error, T10040: Collada: D:\myColladaFile.dae - Invalid data index (32500/32500) in primitive specification 
Info, T10040: Load D:\myColladaFile.dae 
Info, T10040: Found a matching importer for this file format: Collada Importer. 
Info, T10040: Import root directory is 'D:\' 
Error, T10040: Collada: D:\myColladaFile.dae - Invalid data index (32500/32500) in primitive specification 
Info, T10040: Load D:\myColladaFile.dae 
Info, T10040: Found a matching importer for this file format: Collada Importer. 
Info, T10040: Import root directory is 'D:\' 
Error, T10040: Collada: D:\myColladaFile.dae - Invalid data index (32500/32500) in primitive specification 

Aber wenn ich als GLTF Format exportieren ist es richtig. Wie kann ich mit dem richtigen Format exportieren und importieren?

Antwort

0

Das klingt wie ein Bug der Asset-Importer-Lib für mich. Wenn der glTF-Exporteur die Szene exportieren kann, ist sie überhaupt gültig. Als Workaround können Sie versuchen, es als glFT-Datei zu exportieren, importieren Sie es mit Blender und exportieren Sie es als Collada-Datei.

Könnten Sie bitte einen Problembericht unter Github/assimp erstellen? Ein Modell, um das Problem zu reproduzieren, wäre wirklich großartig.