bool SceneLoader::LoadScene(const std::string& file_name, Scene& scene, std::string& status) { Assimp::Importer importer; importer.SetPropertyInteger(AI_CONFIG_PP_SBP_REMOVE, aiPrimitiveType_POINT | aiPrimitiveType_LINE); const aiScene* assimp_scene = importer.ReadFile(file_name, aiProcess_Triangulate | aiProcess_JoinIdenticalVertices | aiProcess_FixInfacingNormals | aiProcess_FindDegenerates | aiProcess_ValidateDataStructure); // | aiProcess_ImproveCacheLocality // | aiProcess_RemoveRedundantMaterials // | aiProcess_FixInfacingNormals | aiProcess_FindDegenerates // | aiProcess_OptimizeGraph | aiProcess_OptimizeMeshes); status = std::string(importer.GetErrorString()); if (!status.empty() || NULL == assimp_scene) { return false; } status = "OK"; for (uint32_t i = 0; i < assimp_scene->mNumCameras; ++i) { ImportCamera(scene, assimp_scene->mCameras[i]); } for (uint32_t i = 0; i < assimp_scene->mNumLights; ++i) { ImportLight(scene, assimp_scene->mLights[i]); } std::cout << "mNumMaterials = " << assimp_scene->mNumMaterials << std::endl; for (uint32_t i = 0; i < assimp_scene->mNumMaterials; ++i) { ImportMaterial(scene, assimp_scene->mMaterials[i]); } std::cout << "mNumMeshes = " << assimp_scene->mNumMeshes << std::endl; for (uint32_t i = 0; i < assimp_scene->mNumMeshes; ++i) { ImportMesh(scene, assimp_scene->mMeshes[i]); } return true; }
//----------------------------------------------------------------------------------- static void ImportNodeAttribute(SceneImport* import, FbxNodeAttribute* attrib, MatrixStack4x4& matrixStack, std::map<int, FbxNode*>& nodeToJointIndex) { if (attrib == nullptr) { return; } switch (attrib->GetAttributeType()) { case FbxNodeAttribute::eMesh: ImportMesh(import, (FbxMesh*)attrib, matrixStack, nodeToJointIndex); break; default: break; } }