0

我正在使用 FBX SDK 2013.3 和 DirectX 上的项目。

我需要一些基础知识,

认为我有一个立方体,从 Maya 导出,扩展名为 .fbx,它有动画,但问题不在于现在。

现在我需要将此 .fbx 文件加载到 DirectX,因此必须处理索引、顶点位置。

我查看了 FBX SDK 文档、示例(主要是 ViewScene 示例)并获得了一些信息。

const char* lFilename = ".\..\..\..\DuzZemin.fbx";  

/* Memory Management */
FbxManager* myManager = FbxManager::Create();

FbxIOSettings* ioSettings = FbxIOSettings::Create(myManager,IOSROOT);
myManager->SetIOSettings(ioSettings);

// Importer
FbxImporter* myImporter = FbxImporter::Create(myManager,"");

if( !myImporter->Initialize(lFilename,-1,ioSettings))
{
    /* Error Handling */
}

/* Scene for Imported File */

FbxScene* myScene = FbxScene::Create(myManager,"My Scene");


myImporter->Import(myScene);

    // Memory DeAllocation
myImporter->Destroy();


FbxNode* rootNode = myScene->GetRootNode();

FbxMesh* myMesh = FbxMesh::Create(myScene,"");

int indexCount = myMesh->GetControlPointsCount();

并且在构建此代码段时,我没有收到任何错误。但在运行时,

indexCount 返回 0 值。

您是否看到任何错误或遗漏的要求?

感谢您的兴趣。

4

2 回答 2

1

好吧,您创建了一个网格,但您没有将其指向场景中的网格。当我加载了一个 .fbx 文件后,我创建了一个网格指针,然后进入我的场景并抓取网格。考虑这段代码。

FbxMesh* mesh;

FbxNode* node = myScene->GetRootNode()->GetChild(0);

//I want my mesh to be formed by triangles so i convert the mesh into triangles
FbxGeometryConverter lConverter(node->GetFbxManager());
lConverter.TriangulateInPlace(node);

mesh = node->GetMesh();

现在您应该能够从网格中获得正确的顶点数,并能够提取顶点。注意:如果您的 .fbx 文件包含多个网格,那么您需要遍历场景,直到找到所需的网格。

希望这可以帮助

于 2013-02-16T14:49:40.157 回答
0
FbxMesh* mesh;

FbxNode* node = myScene->GetRootNode()->GetChild(0);

//I want my mesh to be formed by triangles so i convert the mesh into triangles
FbxGeometryConverter lConverter(node->GetFbxManager());
lConverter.TriangulateInPlace(node);

mesh = node->GetMesh();
于 2017-05-15T01:53:04.293 回答