2017-10-17 153 views
1

我有我的格式的一些3D模型,并希望将它们更改为标准格式并在我的项目中使用它们,所以我开始使用Assimp库。我为创建aiScene代码:Assimp导入导出格式错误

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

它运行正常,但是当我去打开文件,Assimp图书馆我有错误。我的导入代码是

scene = aiImportFile(path, aiProcessPreset_TargetRealtime_MaxQuality);

,我得到了错误:

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 

但是,当我导出为GLTF格式是正确的。所以我怎样才能导出和导入正确的格式?

回答

0

这听起来像一个Bug Asset-Importer-Lib对我来说。当glTF-exporter能够导出场景时,它应该是有效的。 作为解决方法,您可以尝试将其导出为glFT文件,然后使用搅拌器将其导出并将其导出为collada文件。

您能否在Github/assimp上创建问题报告?重现此问题的模式将非常棒。