当前位置:网站首页>读取FBX文件踩坑清单
读取FBX文件踩坑清单
2022-08-02 03:29:00 【ChivenZhang】
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各管道长度都相同(否则需要人为做管道插值)。
暂时发下这些问题,希望对你有帮助。
边栏推荐
猜你喜欢

移动云物联网预研及阿里云开发对比分析

【Arduino连接时钟模块在LCD1602上显示时间】

Case | industrial iot solutions, steel mills high-performance security for wisdom

阿里云华为云对比分析

How to quickly build your own IoT platform?

博达工业云与阿里云对比

SyntaxError: unexpected character after line continuation character
![[Arduino uses a rotary encoder module]](/img/2a/43ffe782d6d5aa9f38f875bb5d98b1.png)
[Arduino uses a rotary encoder module]

字符串匹配(蛮力法+KMP)

日志分析系统:ELK
随机推荐
【科普贴】MDIO接口详解
最第k大的数的一般性问题
Nest 的实现原理?理解了 reflect metadata 就懂了
VCA821可变增益放大器
【DS3231 RTC实时时钟模块与Arduino接口构建数字时钟】
OneNET Studio与IoT Studio对比分析
Temporal Segment Networks:Towards Good Practices for Deep TSN论文精读笔记
哈工大2021机器学习期末考试题
功率计,物联网,智能插座电路设计【毕业设计】
【水位传感器与 Arduino 连接测量水位】
Anaconda(Jupyter)里发现不能识别自己的GPU该怎么办?
MPU6050 加速度计和陀螺仪传感器与 Arduino 连接
Industry where edge gateway strong?
Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset I3D论文精读
三相同步发电机的空载短路的simulink仿真
Spark MLlib特征处理 之 StringIndexer、IndexToString使用说明以及源码剖析
使用Vercel托管自己的网站
GM8775C规格书,MIPI转LVDS,MIPI转双路LVDS分享
振芯科技GM8285C:功能TTL转LVDS芯片简介
网站开发方案研究