如何使用assimp从导入的obj中导出fbx

问题描述 投票:0回答:1

我正在创建我的 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!");
}

此代码也运行良好,但它不会改变网格中的任何内容。

c++ fbx assimp
1个回答
0
投票

Assimp导出与数据源的资源格式无关,用于生成aiScene实例。

因此,当并非所有数据都会导出时,原因可能是:

  • 数据通过后处理和验证步骤进行了修改。可以通过查看日志找到缺失的信息
  • 使用的出口商有问题。为了缓解这个问题,您可以在项目空间上打开错误报告
© www.soinside.com 2019 - 2024. All rights reserved.