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文件踩坑清单相关推荐

  1. 【pd读取csv文件踩坑】读取csv文件时报错:UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xb5 in position 0

    写在前面: 由于CSDN的审查机制的原因,更多博客内容请访问我的个人博客或GitHub: 个人博客地址:个人博客 GitHub地址:GitHub 你是否有过之前用pd.read打开csv文件都正常,但 ...

  2. oracle vm 加载ova,vmware导入ova文件踩坑记小结

    问题来源 众所周知,所有的网络行为都会产生相应的网络流量,那么所有的网络攻击行为也有其对应的流量特点,那么是否能根据流量特点进而分析出其对应的是什么攻击行为呢? 我在虚拟机上使用vulnhub的靶场环 ...

  3. Python读取大文件的坑与内存占用检测

    Python读取大文件的"坑"与内存占用检测 1.read()与readlines() with open(file_path, 'rb') as f:sha1Obj.update ...

  4. Edit Control读取与写入踩坑实例与使用方法

    Edit Control文本编辑使用踩坑实例与使用方法 如果遇见以下问题,可以参考一下(我暂时是两个编辑框): 不知道Edit Control读取与写入的用法怎么用 OnKillfocusEditSh ...

  5. Python读取大文件的坑“与内存占用检测

    python读写文件的api都很简单,一不留神就容易踩"坑". 笔者记录一次踩坑历程,并且给了一些总结,希望到大家在使用python的过程之中,能够避免一些可能产生隐患的代码. r ...

  6. python读取大文件的坑_Python读取大文件的坑“与内存占用检测

    python读写文件的api都很简单,一不留神就容易踩"坑".笔者记录一次踩坑历程,并且给了一些总结,希望到大家在使用python的过程之中,能够避免一些可能产生隐患的代码. 1. ...

  7. 使用exe4j+inno setup打包exe文件踩坑记录

    一.前言 最近用Java给朋友写了一个截图工具和将所有图片生成pdf工具,但是由于朋友不是计算机行业的人员,如果为了使用java常见的运行方式运行工具,则还需要在电脑上安装jdk与jre,着实不方便. ...

  8. python导入处理txt文件-python读取大文件踩过的坑——读取txt文件词向量

    在读取https://github.com/Embedding/Chinese-Word-Vectors中的中文词向量时,选择了一个有3G多的txt文件,之前在做词向量时用的是word2vec,所以直 ...

  9. python读取大文件的坑_python读取大文件踩过的坑——读取txt文件词向量

    在读取https://github.com/Embedding/Chinese-Word-Vectors中的中文词向量时,选择了一个有3G多的txt文件,之前在做词向量时用的是word2vec,所以直 ...

  10. python让词向量一直在内存里_python读取大文件踩过的坑——读取txt文件词向量

    在读取https://github.com/Embedding/Chinese-Word-Vectors中的中文词向量时,选择了一个有3G多的txt文件,之前在做词向量时用的是word2vec,所以直 ...

最新文章

  1. 《卓有成效的管理者》——读书笔记
  2. input子系统基础之按键2——input设备应用层编程实践
  3. 前两年在MSDN里找到的HTC示例,一直没用过,先在这里存个备份
  4. java 定时器 的中断程序,AVR单片机教程——定时器中断
  5. C51红外接收与发射控制及原理编码与解码
  6. 使用计算机编辑文档的同时 还可播放mp3,win7系统电脑怎么使用Windows Movie Maker剪辑音频文件...
  7. 山海关与老龙头 逃不掉的寂寞与人群
  8. 分布式、集中式存储与san、nas
  9. Python hash函数详解
  10. 复杂的1秒--图解Google搜索技术
  11. 超详细:将iPhone中音乐导出到电脑里的简单方法(完美支持最新iOS15.2系统)
  12. 解决极客时间网页文字无法选中或复制copy
  13. CIFS协议入门指南:快速部署文件共享服务器
  14. 关于dedecms织梦后台html编辑器不能复制word格式的处理方法/ kindEditor编辑器/百度(ueditor)编辑器的添加方法
  15. linux 加载新的硬盘
  16. 专业企业培训——深圳良师优选张晨讲师简介
  17. PPT分享第01季-226套多种风格模板
  18. localstorage使用
  19. GEE学习笔记5:随机森林
  20. 头歌实践教学平台-Linux网络实战(一)-DNS配置(Ubuntu系统)——保姆级教程

热门文章

  1. java微信h5支付_Java-实现微信H5支付
  2. 面向对象编程三大特性------封装、继承、多态
  3. 封装继承多态还是封装抽象继承多态
  4. ubuntu从源码编译安装python
  5. IDEA如何执行Maven命令总结
  6. 浏览器密码查看工具-WebBrowserPassView使用实验 ——合天网安实验室学习笔记
  7. MAXScript入门
  8. 令牌桶算法和漏桶算法python_如何实现漏桶算法与令牌桶算法
  9. 物联网通信技术课程安排
  10. win7计算机怎么录屏,win7电脑怎么录屏?这个实用工具给你答案!