读取FBX文件踩坑清单
FBX文件得到了许多3D制图软件与3D游戏引擎的兼容,其发展趋势大好。因此若要编写一款3D图形系统,对FBX格式的支持是必经之路(或者使用插件形式)。笔者尝试在百度、必应等搜索引擎,外加fbxsdk实例的帮助下,读取了FBX文件,并且生成图像。特地编写一篇文章叙述解析FBX过程中,容易踩到的坑。以下展示显示效果:
模型原图:
显示效果:
踩坑清单:
1、FBX资源组织方式。FBX文件以多叉树结构组织,其解析始于FbxScene根结点,根节点下挂载网格、材质、纹理贴图、动画、骨骼、蒙皮、灯光等数据结点。这些概念的获得,笔者建议直接阅读FBXSDK项目下的官方程序示例。其中需要说明的是,网格与动画数据是独立的,它们通过骨骼蒙皮的形式,进行间接关联。
2、FBX贴图坐标倒转。笔者在解析静态网格时发现,直接使用UV坐标会导致模型的贴图出现上下颠倒的情况(me.u = fbx.u; me.v = fbx.v;),即在导入一只狗的模型时,头部贴图附着在模型的尾部。于是尝试性地改变UV坐标映射方式(me.u = fbx.u;me.v = 1.0-fbx.v;),结果出现,多数模型贴图映射为正常。笔者思考,fbx贴图的坐标原点是否异于窗口坐标系,位于图片左下角。
3、采用遍历动画层结点方式读取动画帧(关节动画)。FbxAnimStack结点下保存多个FbxAnimLayer结点(多个Layer是为了做动画混合),FbxAnimLayer结点保存了骨骼(关节)的多帧动画数据,这些关节动画需要遍历场景树的所有骨骼结点,才能获取。所谓的坑在于,FBXSDK中提供的动画导入示例,在读取关节变换矩阵(SQT数据结构)时,采用分别获取多帧动画的S(cale)、Q(uaternion)、T(ransfer)数组,在循环中获取的方式(即动画管道,例如坐标(x,y,z),使用管道方式是[x0,x1,...], [y0,y1,...], [z0,z1,...])。若这样做,在实际中发现,各个管道的长度不一。例如对于单个关节的SQT帧序列(数组),存在length(S)、length(Q)、length(T)的长度不等,这是非常棘手的问题。以上情况在参考其它文档后发现,可以直接在遍历AnimCurve结点时,设置帧率(比如24帧),采用EvaluateGlobalTransform接口,获取换算后的矩阵。再将其转换为SQT结构,这样保证同一关节的SQT各管道长度都相同(否则需要人为做管道插值)。
暂时发下这些问题,希望对你有帮助。
2022-08-27 注:别用fbxsdk了,转assimp吧!
读取FBX文件踩坑清单相关推荐
- 【pd读取csv文件踩坑】读取csv文件时报错:UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xb5 in position 0
写在前面: 由于CSDN的审查机制的原因,更多博客内容请访问我的个人博客或GitHub: 个人博客地址:个人博客 GitHub地址:GitHub 你是否有过之前用pd.read打开csv文件都正常,但 ...
- oracle vm 加载ova,vmware导入ova文件踩坑记小结
问题来源 众所周知,所有的网络行为都会产生相应的网络流量,那么所有的网络攻击行为也有其对应的流量特点,那么是否能根据流量特点进而分析出其对应的是什么攻击行为呢? 我在虚拟机上使用vulnhub的靶场环 ...
- Python读取大文件的坑与内存占用检测
Python读取大文件的"坑"与内存占用检测 1.read()与readlines() with open(file_path, 'rb') as f:sha1Obj.update ...
- Edit Control读取与写入踩坑实例与使用方法
Edit Control文本编辑使用踩坑实例与使用方法 如果遇见以下问题,可以参考一下(我暂时是两个编辑框): 不知道Edit Control读取与写入的用法怎么用 OnKillfocusEditSh ...
- Python读取大文件的坑“与内存占用检测
python读写文件的api都很简单,一不留神就容易踩"坑". 笔者记录一次踩坑历程,并且给了一些总结,希望到大家在使用python的过程之中,能够避免一些可能产生隐患的代码. r ...
- python读取大文件的坑_Python读取大文件的坑“与内存占用检测
python读写文件的api都很简单,一不留神就容易踩"坑".笔者记录一次踩坑历程,并且给了一些总结,希望到大家在使用python的过程之中,能够避免一些可能产生隐患的代码. 1. ...
- 使用exe4j+inno setup打包exe文件踩坑记录
一.前言 最近用Java给朋友写了一个截图工具和将所有图片生成pdf工具,但是由于朋友不是计算机行业的人员,如果为了使用java常见的运行方式运行工具,则还需要在电脑上安装jdk与jre,着实不方便. ...
- python导入处理txt文件-python读取大文件踩过的坑——读取txt文件词向量
在读取https://github.com/Embedding/Chinese-Word-Vectors中的中文词向量时,选择了一个有3G多的txt文件,之前在做词向量时用的是word2vec,所以直 ...
- python读取大文件的坑_python读取大文件踩过的坑——读取txt文件词向量
在读取https://github.com/Embedding/Chinese-Word-Vectors中的中文词向量时,选择了一个有3G多的txt文件,之前在做词向量时用的是word2vec,所以直 ...
- python让词向量一直在内存里_python读取大文件踩过的坑——读取txt文件词向量
在读取https://github.com/Embedding/Chinese-Word-Vectors中的中文词向量时,选择了一个有3G多的txt文件,之前在做词向量时用的是word2vec,所以直 ...
最新文章
- 《卓有成效的管理者》——读书笔记
- input子系统基础之按键2——input设备应用层编程实践
- 前两年在MSDN里找到的HTC示例,一直没用过,先在这里存个备份
- java 定时器 的中断程序,AVR单片机教程——定时器中断
- C51红外接收与发射控制及原理编码与解码
- 使用计算机编辑文档的同时 还可播放mp3,win7系统电脑怎么使用Windows Movie Maker剪辑音频文件...
- 山海关与老龙头 逃不掉的寂寞与人群
- 分布式、集中式存储与san、nas
- Python hash函数详解
- 复杂的1秒--图解Google搜索技术
- 超详细:将iPhone中音乐导出到电脑里的简单方法(完美支持最新iOS15.2系统)
- 解决极客时间网页文字无法选中或复制copy
- CIFS协议入门指南:快速部署文件共享服务器
- 关于dedecms织梦后台html编辑器不能复制word格式的处理方法/ kindEditor编辑器/百度(ueditor)编辑器的添加方法
- linux 加载新的硬盘
- 专业企业培训——深圳良师优选张晨讲师简介
- PPT分享第01季-226套多种风格模板
- localstorage使用
- GEE学习笔记5:随机森林
- 头歌实践教学平台-Linux网络实战(一)-DNS配置(Ubuntu系统)——保姆级教程