У меня есть 3D-модель в моем формате, и я хочу изменить их на стандартные форматы и использовать их в своем проекте, поэтому я начал использовать библиотеку Assimp. Мой код для создания aiScene
является:
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
формат это правильно. так как я могу экспортировать и импортировать в правильном формате?
Для меня это звучит как ошибка Asset-Importer-Lib. Когда glTF-экспортер может экспортировать сцену, он должен быть действителен вообще.
В качестве обходного пути вы можете попробовать экспортировать его в виде glFT-файла, импортировать его с помощью blender и экспортировать как файл collada.
Не могли бы вы создать отчет о проблеме на Github / assimp пожалуйста? Модель для воспроизведения проблемы была бы действительно великолепна.
Других решений пока нет …