我正在创建我的 C++ 游戏引擎,我希望能够使用 FBX 格式导出我的场景。
因此,当我尝试从之前导入的 OBJ 文件导出 FBX 时,实际上可以正确渲染。但是,当导出到最初导入的位置以外的任何位置时,它无法正确导出。
std::unique_ptr<Assimp::Exporter> exporter = std::make_unique<Assimp::Exporter>();
const auto* scene = mesh->mScene;
exporter->Export(scene, "fbx", "assets/output.fbx");
这里,
mesh->mScene
是之前导入的aiScene
。
这段代码确实有效,并且
Export()
返回成功;但是,输出文件不包含网格的正确数据。只有从 FBX 导入时才是正确的,并且可以毫无问题地导入到 Maya 中。
我需要一种方法来将
Assim::aiScene
转换为 FBX 格式导出,因为 Assimp
只允许将网格导出为与导入时相同的格式。
另外,我希望能够修改网格,假设我想替换漫反射纹理。
//Yeah, sorry I am still a beginner :)
auto* aiMaterial = mesh->mScene->mMaterials[index];
if (aiMaterial->RemoveProperty("$clr.diffuse") != 0 || aiMaterial->AddProperty(texture->getPath().c_str(), 1, "$clr.diffuse") != 0)
{
assert(false, "Failed to add property!");
}
此代码也运行良好,但它不会改变网格中的任何内容。
Assimp导出与数据源的资源格式无关,用于生成aiScene实例。
因此,当并非所有数据都会导出时,原因可能是: