最近几个月一直在做FBX数据转换方面的工作,记录下一些工作中遇到的问题和相应解决方案,算是对自己多日工作的总结也希望有需要的人能看到。

今天讨论的Fbx中文问题主要是集中在两方面:1、使用Sdk加载的Fbx文件的路径中存在中文 2、Fbx中保存的数据存在中文(例如Node 名称、材质名称等)。当我们按Sdk提供的范例直接加载路径中存在中文的Fbx文件时会直接报错。这里的解决方案是在将Fbx文件路径字符串交由Sdk加载前先进行一次字符编码转换,代码如下:

FbxString filePath=MyString::StdStr2FbxStr(srcFile);// srcFile 为Fbx文件路径// Use the first argument as the filename for the importer.
if(!lImporter->Initialize(filePath.Buffer(), -1, lSdkManager->GetIOSettings())) { printf("Call to FbxImporter::Initialize() failed.\n"); printf("Error returned: %s\n\n", lImporter->GetStatus().GetErrorString());    return false;
}FbxString MyString::StdStr2FbxStr(string str)
{FbxString retStr="";char * newStr=NULL;FbxAnsiToUTF8(str.c_str(),newStr);// Fbx Sdk 提供的字符编码转换APIif(NULL!=newStr){retStr=newStr;delete[] newStr; // 要记得释放}return retStr;
}

解决了Fbx中文路径问题后,我们再来看看Fbx文件中本身数据包含中文的处理方法,若调用Sdk接口返回的字符串不经过转码处理会显示为乱码,这时我们只要我们进行一次转码就OK啦,代码如下:

FbxNode *pNode=...
std::string nodeName=MyString::FbxStr2StdStr(pNode->GetName());string MyString::FbxStr2StdStr(FbxString fbxStr)
{string retStr="";char * newStr=NULL;FbxUTF8ToAnsi(fbxStr.Buffer(),newStr);if(NULL!=newStr){retStr=newStr;delete[] newStr;}return retStr;
}

经过上面的解释相信大家都知道了Fbx中的中文问题产生的原因主要是字符编码上面,Fbx内部是以UTF-8编码保存字符的,而我们的开发环境中的字符多是以ANSI或者Unicode存储的,解析使用的编码和实际数据的编码不匹配产生乱码也就在所难免了。

PS:以上只是针对开发环境字符编码设置为ANSI的情况进行说明的,若字符编码设置为Unicode,则可使用windows API  WideCharToMultiByte(...)或直接使用FBX SDK提供的FbxWCToAnsi(...)将Unicode字符转成Ansi再按以上处理即可。

FBX SDK编码转换API头文件:

fbxsdk/core/base/fbxstring.h

SDK相关参考:

FBX SDK Programmer's Guide > FBX SDK Object Model > Connections> Supported String Formats

FBX SDK 总结之中文问题相关推荐

  1. fbx sdk android,Autodesk FBX SDK Program 中文 (一)

    这是我的FBX SDK学习笔记.如文有错误.麻烦各位大大指出 为什么要使用FBX SDK? 由于3D建模软件都被AutoDesk收购了.FBX能够在各个建模软件之间互相导入导出,在非常多游戏引擎中也用 ...

  2. Working with FBX SDK (2)

    Working with FBX SDK (2) 仅供个人学习使用,请勿转载,勿用于任何商业用途 作者:clayman 更新2012.5:  *****fbx sdk 2013以后的版本做了大幅更新, ...

  3. FBX SDK下载安装教程

    目录 FBX SDK介绍 FBX SDK下载安装 FBX SDK介绍 Fbx 是 Autodesk MotionBuilder 固有的文件格式,用于创建.编辑和混合运动捕捉和关键帧动画,也常用于动画文 ...

  4. FBX SDK快速简笔(基本)

    FBX SDK快速简笔(摘至官方文档(因不开源,大部分地方官方文档中存在保密,以个人理解进行了一部分的推导,该文章免费并承诺不涉及如何利益)) FBX模型的组织结构 FBX是以scene graph的 ...

  5. Directx11教程四十六之FBX SDK

    在之前的DX11入门系列文章中,有篇有关 Directx11教程四十之加载OBJ模型 读取obj模型数据的博客.不过在obj读取的那篇博客我有些坑并没有说,就是我写的那个obj解析器只能解析特定的ob ...

  6. fbx sdk android,FBX SDK环境配置

    参照这个https://blog.csdn.net/lilysara/article/details/53940353 注意事项1. 选择lib文件夹的时候注意和电脑配置匹配 不匹配的话会报这个错误. ...

  7. 基于FBX SDK的FBX模型解析与加载 -(三)

    6. 加载Camera和Light 在FBX模型中除了几何数据外较为常用的信息可能就是Camera和Light,虽然在游戏中一般不直接从模型中得到这两部分信息,而是由引擎来提供,但是FBX中提供了对这 ...

  8. FBX SDK动画开发

    本文翻译自FBX SDK官方英文地址: https://help.autodesk.com/view/FBX/2020/ENU/?guid=FBX_Developer_Help_animation_h ...

  9. FBX SDK对象模型

    FBX SDK对象模型 FBX SDK对象模型 一.FBX对象 1.FBX对象创建和销毁 2.属性 3.集合 4.复制FBX对象 二.FBX属性 1.管理属性 2.属性数据 3.属性层次 4.示例代码 ...

最新文章

  1. SQL Server自定义字符串分割函数——Split
  2. linux 服务器 安装网卡驱动,linux下安装编译网卡驱动的方法
  3. JavaScript创建Map对象(转)
  4. HtmlParser 简介
  5. Linux 信号signal处理函数--转
  6. 时间日期格式转换_JAVA
  7. Python学习笔记:常用内建模块7XML
  8. PMP之项目相关方管理
  9. Boost - 序列化 (Serialization)
  10. 多线程销售问题java_Java多线程Runable售票系统实现过程解析
  11. python-自定义模块-文件的操作
  12. 共享锁与排它锁区别(转)
  13. 50行javaScript代码实现简单版的 call , apply ,bind 【中级前端面试基础必备】
  14. Android 系统(30)---如何用DDMS分析native memory leak
  15. C语言学习笔记---结构体的定义和初始化
  16. 每天一道剑指offer-翻转单词顺序列
  17. ACS——网管的九阳神功
  18. 怎么将图片旋转一定角度?
  19. QQ淘宝自动转链转发机器人MkStone京东淘宝转链助手
  20. Java实现音频格式转换 WAV—mp3,可使音频压缩

热门文章

  1. OpenGL---实例 球体 画圆锥
  2. PHP判断中文字符串的长度和字节长度
  3. 二进制换算成八进制、十进制、十六进制
  4. javaweb+servlet+mysql登录+注册+增删改查源码
  5. 计算机共享访问权限 xp,上面就是xp访问win7共享要密码的解决方法
  6. 巅峰对决!2020人工智能创新创业大赛总决赛评委阵容、项目亮点震撼揭晓
  7. PostgreSQL 透明加密(TDE,FDE) - 块级加密
  8. 程序员在互联网创业公司工作五年是一种怎样的体验?
  9. 五年磨一剑,灵雀云的蜕变
  10. React Native实践之携程Moles框架