使用Assimp获取FBX纹理文件时路径无效的解决咨询
解决Mixamo FBX纹理路径在Windows下无法读取的问题
问题原因
Mixamo导出的FBX文件中,纹理路径是其服务器生成环境下的绝对路径(如../../../../home/app/mixamo-mini/tmp/skins_XXX.fbm/Mutant_Diffuse.png),并非适配本地环境的相对路径,因此在Windows系统中无法匹配到真实的纹理文件位置。
解决方案
1. 手动整理纹理文件位置
- 下载Mixamo资源时,完整资源包通常会包含与FBX关联的
.fbm文件夹,其中存放对应纹理图片。若未自动获取,需重新下载完整资源包确保纹理文件齐全。 - 将
.fbm文件夹放置在与FBX文件同一目录下,或统一存放到项目预设的纹理目录(如项目根目录下的Textures文件夹)。
2. 提取纹理文件名并拼接本地路径
忽略Assimp返回的完整路径,仅提取末尾的纹理文件名,再与本地纹理目录拼接:
#include <string> #include <filesystem> aiString path; mat->Get(AI_MATKEY_TEXTURE_DIFFUSE(0), path); std::string fullPath(path.C_Str()); // 提取文件名 std::filesystem::path fsPath(fullPath); std::string textureFileName = fsPath.filename().string(); // 拼接本地纹理路径(示例为FBX所在目录下的fbm文件夹) std::filesystem::path fbxDir = "path/to/your/fbx/directory"; std::filesystem::path localTexturePath = fbxDir / "skins_XXX.fbm" / textureFileName; // 后续使用localTexturePath加载纹理
3. 配置Assimp纹理搜索路径
加载FBX时,通过aiIOConfig添加本地纹理搜索目录,让Assimp自动匹配纹理:
Assimp::Importer importer; aiScene* scene; // 配置IO参数,添加纹理搜索目录 aiIOConfig ioConfig; ioConfig.AddSearchPath("path/to/your/texture/directory"); // 本地纹理所在目录 // 加载FBX并启用必要后处理 scene = importer.ReadFile("your_model.fbx", aiProcess_Triangulate | aiProcess_GenSmoothNormals | aiProcess_FlipUVs, &ioConfig);
4. 修改FBX文件中的纹理路径(可选)
使用FBX SDK或Blender等工具打开FBX文件,手动将纹理路径修改为相对路径(如./skins_XXX.fbm/Mutant_Diffuse.png),保存后再用Assimp加载,可永久修复路径问题。
内容的提问来源于stack exchange,提问作者yldbear77
相关产品推荐
相关产品推荐

