FBX Python SDK 入门教程

安装
1. 下载 FBX Python SDK
官网地址,根据你的操作系统,下载相应的 FBX SDK 2020.3.4 Python exe 文件。

2. 安装
执行下载的文件 fbx202034_fbxpythonsdk_win.exe,安装完的程序路径我的是 D:\Program Files\Autodesk\FBX\FBX Python SDK\2020.3.4。里面有个 Python 的 whl 包,还有个 samples 文件夹,这个也有用。
安装 whl:pip install fbx-2020.3.4-cp310-none-win_amd64.whl
使用
1. 加载模型
把上面提到的 samples 文件夹中的 FbxCommon.py 文件复制到你的 Python 程序目录。

import FbxCommonfilename = "" # 文件路径
manager, scene = FbxCommon.InitializeSdkObjects() # 初始化
FbxCommon.LoadScene(manager, scene, filename) # 加载场景

2. FbxScene 和 FbxNode

场景和根节点

场景是节点组成的树状结构。FbxScene 有个根节点,节点通过 GetChild 方法获取子节点。

root_node = scene.GetRootNode()
for i in range(root_node.GetChildCount()):node = root_node.GetChild(i)


 
由此,可以获取每个节点

def make_tree(scene):def get_child(parent_node):child_count = parent_node.GetChildCount()tree = {}for i in range(child_count):child_node = parent_node.GetChild(i)tree[child_node.GetName()] = get_child(child_node)return treeroot_node = scene.GetRootNode()tree = get_child(root_node)


 

3. 遍历和处理 FBX 节点

在上一节中,我们定义了 make_tree 函数来递归地获取 FBX 场景中的所有节点,并将它们组织成一个树状结构。这个树状结构可以方便地让我们遍历、查询和修改节点。

接下来,我们将进一步探讨如何处理这些节点。

3.1 遍历节点树

有了 make_tree 函数生成的节点树,我们可以使用递归函数来遍历它:

def traverse_tree(tree, indent=""):for name, child_tree in tree.items():print(f"{indent}{name}")traverse_tree(child_tree, indent + "  ")# 使用前面定义的 make_tree 函数获取节点树
tree = make_tree(scene)
# 遍历并打印节点名称
traverse_tree(tree)
3.2 处理节点属性

FBX 节点包含了许多属性,如变换(位置、旋转、缩放)、几何形状、材质等。我们可以根据需求来读取或修改这些属性。

例如,获取节点的变换信息:

def get_transform(node):transform = node.EvaluateLocalTransform()  # 获取节点的本地变换translation = transform.GetT()  # 获取位移rotation = transform.GetQ()  # 获取旋转(四元数)scale = transform.GetS()  # 获取缩放return translation, rotation, scale# 获取某个节点的变换信息
node = root_node.GetChild(0)  # 假设我们获取第一个子节点
translation, rotation, scale = get_transform(node)
print(f"Translation: {translation}")
print(f"Rotation: {rotation}")
print(f"Scale: {scale}")
3.3 处理几何形状和材质

如果节点包含几何形状(如网格),我们可以通过节点的 GetGeometry 方法来获取它。同样,如果节点有材质,我们也可以通过相应的方法来获取。

处理几何形状和材质通常涉及到更复杂的操作,如读取顶点数据、索引数据、UV 坐标、材质属性等。这些操作需要根据具体需求和 FBX 文件的结构来进行。

4. 保存修改后的 FBX 文件

在对 FBX 文件进行读取、修改等操作后,我们可能想要保存修改后的内容。FBX SDK 提供了保存场景的功能。

import FbxIOSettings
import FbxExporter# 创建保存设置
ios = FbxIOSettings.Create(FbxIOSettings.IOSROOT, FbxIOSettings.IOS_EXPORT)
ios.SetBoolProp(FbxIOSettings.EXP_FBX_MATERIAL, True)  # 保存材质等信息
ios.SetBoolProp(FbxIOSettings.EXP_FBX_TEXTURE, True)  # 保存纹理等信息# 创建导出器并设置文件名
exporter = FbxExporter.Create(manager, "output.fbx", ios)# 导出场景
if not exporter.Initialize(scene, -1, manager.GetIOSettings()):print("Failed to initialize exporter.")return
if not exporter.Export(scene):print("Failed to export scene.")return
exporter.Destroy()  # 清理导出器资源

5. 结语

通过本文的介绍,相信你已经对如何使用 FBX SDK 在 Python 中加载、处理和保存 FBX 文件有了初步的了解。FBX SDK 提供了丰富的功能和强大的灵活性,可以满足各种3D模型处理需求。当然,要深入掌握它还需要更多的实践和学习。希望本文能为你的学习之旅提供一个良好的起点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/703293.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django创建网站的地基

相关文档 1、为新网站创建一个文件夹(这里是:locallibrary) D:\django>mkdir locallibraryD:\django>cd locallibraryD:\django\locallibrary>dirVolume in drive D is 新加卷Volume Serial Number is B68C-03F7Directory of D:\dj…

vue+element 验证输入框是否包含特殊字符(赠送ip+域名双验证判断)

1 效果: 2 添加element自定义验证方法 rules{ dbConfig.address: [ { required: true, validator: validatehost_ip, trigger: blur } ] } 3 添加对应方法 var validatehost_ip (rule, value, callback) > {if (!value) {callback(new Error(地址不可为空))} else {//验…

图书个性化推荐系统的设计与实现

springboot003图书个性化推荐系统的设计与实现 亲测完美运行带论文:获取源码,私信评论或者v:niliuapp 运行视频 包含的文件列表(含论文) 数据库脚本:db.sql其他文件:ppt.pptx论文/文档:论文…

什么是ARP攻击,怎么做好主机安全,受到ARP攻击有哪些解决方案

在数字化日益深入的今天,网络安全问题愈发凸显其重要性。其中,ARP攻击作为一种常见的网络攻击方式之一,往往给企业和个人用户带来不小的困扰。ARP协议是TCP/IP协议族中的一个重要协议,负责把网络层(IP层)的IP地址解析为数据链路层…

代购系统搭建,淘宝、1688海外代购系统建设以及部分前端源码展示

客户登录主界面&#xff0c;可以根据个人需求更换。 可支持个人定制模块化&#xff0c;也有一些模块可供选择 系统演示站测试 部分源码展示&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"> <title>会员中心 – 淘…

JavaScript引入方式

JS引入方式 1 内部脚本方式引入2 外部脚本方式引入 1 内部脚本方式引入 说明 在页面中,通过一对script标签引入JS代码script代码放置位置具备一定的随意性,一般放在head标签中居多 代码 <!DOCTYPE html> <html lang"en"><head><meta charset…

NGINX SPRING HTTPS证书

服务器&#xff1a;xxx.xxx.xxx.56 客户端器&#xff1a;xxx.xxx.xxx.94##生成服务器证书和密钥容器 keytool -genkey -alias tas-server -keypass 250250 -keyalg RSA -keysize 2048 -validity 3650 -keystore D:\https证书\tas-server.jks -storepass 250250 -dname "C…

STL—string类(1)

一、string类 1、为什么要学习string&#xff1f; C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不太符合OOP&#xff08;面向对象…

Google I/O 2024 干货全解读:Gemini AI 横空出世,智能未来触手可及!

Google I/O 2024 干货全解读&#xff1a;Gemini AI 横空出世&#xff0c;智能未来触手可及&#xff01; 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》…

tomcat启动闪退解决办法

tomcat启动闪退解决办法 1. 端口号被占用2. 检查电脑环境配置2.1 如何配置电脑的环境变量&#xff1f; windows系统下&#xff0c;tomcat安装好以后&#xff0c;双击bin文件下startup.bat后&#xff0c;tomcat没能按照预期打开&#xff0c;反而闪退了。 导致这种情况发生&…

【二叉树】(二)二叉树的基础修改构造及属性求解1

&#xff08;二&#xff09;二叉树的基础修改构造及属性求解1 翻转二叉树递归实现迭代实现&#xff08;深度遍历&#xff09;层序实现&#xff08;广度遍历&#xff09; 对称二叉树递归实现迭代实现&#xff08;非层序遍历&#xff09; 二叉树的最大深度递归法迭代法&#xff0…