#include using namespace std; /** * 递归遍历FBX节点树结构 * @param parent_node 起始父节点,从此节点开始向下遍历(若为nullptr则函数不执行任何操作) * @param level 当前节点层级(用于缩进或层级标识,建议初始调用时传入0) * @note 函数内部会递归访问parent_node的所有直接子节点和间接子节点 * @warning 若输入的parent_node无效(如野指针)可能导致程序崩溃 */ void each_node(FttContext* ctx, FbxNode* parent_node, int level); /** * 打印FBX节点的基本信息(含层级缩进) * @param node 待打印信息的节点指针(nullptr时输出警告日志) * @param level 节点层级(用于控制打印缩进,每级建议缩进4空格) * @details 输出内容包含:节点名称、类型、子节点数量、层级深度 * @example 层级2的节点打印格式:" |-- NodeName (Type: Mesh, Children: 3)" */ void print_node_info(FbxNode* node, int level); /** * 从FBX文件加载并返回根节点 * @param fbx_path FBX文件路径(需绝对路径或相对于可执行文件路径) * @return FbxNode* 成功时返回根节点指针,失败返回nullptr * @note 内部会初始化FBX SDK环境并自动释放资源 * @warning 路径无效或文件损坏时返回空指针,需调用方检查 */ FbxNode* get_fbx_root_node(const char* fbx_path); /** * @brief 从FBX网格属性加载顶点数据和三角化索引 * @param[in] attr FBX节点属性,需为FbxMesh类型 * @param[out] indices 输出三角形索引数组(每个Triangle存储3个顶点索引) * @param[out] vertices 输出顶点坐标数组(每个Triangle存储3个FbxVector4顶点) * @return bool 成功返回true,失败返回false * @note 内部会强制三角化网格,非三角形多边形将被忽略 */ int load_triangles(fbxsdk::FbxNodeAttribute* attr, std::vector indices, std::vector &vertices);