2017-10-17 37 views
1

J'ai un modèle 3D dans mon format et je veux les changer en formats standard et les utiliser dans mon projet, j'ai donc commencé à utiliser la bibliothèque Assimp. Mon code pour créer aiScene est:Erreur de format d'exportation d'importation d'impim

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;} 

Il fonctionne correctement, mais quand je vais ouvrir le fichier avec Assimp Library je me suis erreur. Mon code d'importation est

scene = aiImportFile(path, aiProcessPreset_TargetRealtime_MaxQuality);

et je me suis erreur:

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 

Mais quand je l'exportation comme GLTF le format est correct. Alors, comment puis-je exporter et importer avec un format correct?

Répondre

0

Cela ressemble à un bug l'Asset-Importateur-Lib pour moi. Lorsque l'exportateur glTF est capable d'exporter la scène, il doit être valide. Pour contourner ce problème, vous pouvez essayer de l'exporter en tant que fichier glFT, l'importer en utilisant blender et l'exporter en tant que fichier collada.

Pourriez-vous créer un rapport de problème sur Github/assimp s'il vous plaît? Un modèle pour reproduire le problème serait vraiment génial.