Autodesk FBX SDK Program 中文 (一)
这是我的FBX SDK学习笔记。如文有错误。麻烦各位大大指出 
为什么要使用FBX SDK?
由于3D建模软件都被AutoDesk收购了。FBX能够在各个建模软件之间互相导入导出,在非常多游戏引擎中也用FBX来直接导入然后编辑。
学会使用FBX SDK后该干什么?
用FBX SDK解析出在fbx文件里保存的顶点、骨骼、贴图、灯光、法线等信息后,保存为自己的模型格式或者直接渲染出来。嗯。对。FBX是作为中间件存在,不会直接用在游戏中。
Autodesk FBX SDK Program 中文 (一)
要直接贴代码了。
代码中会有一些中文的解释。出自有道翻译……
首先看看环境配置,一个普通的空project。
加入头文件路径:
加入链接文件文件夹:
加入链接文件:
阿嘞,没有链接文件。
我们在代码里面把lib加进来就好了。
复制dll文件到debug文件夹:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHV1dHU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
还缺一个 fbx文件……。从网上下一个吧。放到project文件夹(看各人设置吧。VS默认是这里)
好了万事具备,贴代码!
#include<fbxsdk.h> #pragma comment(lib,"libfbxsdk.lib") int numTabs=0; void PrintTabs() //打印tabs。造出像xml那样的效果
{
for (int i = 0; i < numTabs; i++)
{
printf("\t");
}
} /**
*依据节点属性的不同,返回字符串。就是返回节点属性的名字
**/
FbxString GetAttributeTypeName(FbxNodeAttribute::EType type)
{
switch (type)
{
case FbxNodeAttribute::eUnknown: return "UnknownAttribute";
case FbxNodeAttribute::eNull: return "Null";
case FbxNodeAttribute::eMarker: return "marker"; //马克……
case FbxNodeAttribute::eSkeleton: return "Skeleton"; //骨骼
case FbxNodeAttribute::eMesh: return "Mesh"; //网格
case FbxNodeAttribute::eNurbs: return "Nurbs"; //曲线
case FbxNodeAttribute::ePatch: return "Patch"; //Patch面片
case FbxNodeAttribute::eCamera: return "Camera"; //摄像机
case FbxNodeAttribute::eCameraStereo: return "CameraStereo"; //立体
case FbxNodeAttribute::eCameraSwitcher: return "CameraSwitcher"; //切换器
case FbxNodeAttribute::eLight: return "Light"; //灯光
case FbxNodeAttribute::eOpticalReference: return "OpticalReference"; //光学基准
case FbxNodeAttribute::eOpticalMarker: return "OpticalMarker";
case FbxNodeAttribute::eNurbsCurve: return "Nurbs Curve";//NURBS曲线
case FbxNodeAttribute::eTrimNurbsSurface: return "Trim Nurbs Surface"; //曲面剪切?
case FbxNodeAttribute::eBoundary: return "Boundary"; //边界
case FbxNodeAttribute::eNurbsSurface: return "Nurbs Surface"; //Nurbs曲面
case FbxNodeAttribute::eShape: return "Shape"; //形状
case FbxNodeAttribute::eLODGroup: return "LODGroup"; //
case FbxNodeAttribute::eSubDiv: return "SubDiv";
default: return "UnknownAttribute";
}
} /**
*打印一个属性
**/
void PrintAttribute(FbxNodeAttribute* pattribute)
{
if(!pattribute)
{
return;
}
FbxString typeName=GetAttributeTypeName(pattribute->GetAttributeType());
FbxString attrName=pattribute->GetName();
PrintTabs(); //FbxString.Buffer() 才是我们须要的字符数组
printf("<attribute type='%s' name='%s'/>\n ",typeName.Buffer(),attrName.Buffer());
} /**
*打印出一个节点的属性,而且递归打印出全部子节点的属性;
**/
void PrintNode(FbxNode* pnode)
{
PrintTabs(); const char* nodeName=pnode->GetName(); //获取节点名字 FbxDouble3 translation=pnode->LclTranslation.Get();//获取这个node的位置、旋转、缩放
FbxDouble3 rotation=pnode->LclRotation.Get();
FbxDouble3 scaling=pnode->LclScaling.Get(); //打印出这个node的概览属性
printf("<node name='%s' translation='(%f,%f,%f)' rotation='(%f,%f,%f)' scaling='(%f,%f,%f)'>\n",
nodeName,
translation[0],translation[1],translation[2],
rotation[0],rotation[1],rotation[2],
scaling[0],scaling[1],scaling[2]); numTabs++; //打印这个node 的全部属性
for (int i = 0; i < pnode->GetNodeAttributeCount(); i++)
{
PrintAttribute(pnode->GetNodeAttributeByIndex(i));
} //递归打印全部子node的属性
for (int j = 0; j < pnode->GetChildCount(); j++)
{
PrintNode(pnode->GetChild(j));
} numTabs--;
PrintTabs();
printf("</node>\n");
} int main(int argc,char** argv)
{
const char* filename="City-1.fbx"; //创建SDKManager
FbxManager* pSdkManager=FbxManager::Create(); FbxIOSettings *pFbxIOSettings=FbxIOSettings::Create(pSdkManager,filename); //设置归属
pSdkManager->SetIOSettings(pFbxIOSettings); //创建FbxImporter用来导入fbx文件
FbxImporter* pImporter=FbxImporter::Create(pSdkManager,""); if(!pImporter->Initialize(filename,-1,pSdkManager->GetIOSettings()))
{
printf("Call to FbxImporter::Initialize() failed");
printf("Error returned :%s\n\n", pImporter->GetStatus().GetErrorString());
return -1;
} FbxScene* pScene=FbxScene::Create(pSdkManager,"city1"); pImporter->Import(pScene); pImporter->Destroy(); //递归打印出这个场景以下的节点的属性
//注意我们不会打印出Root节点由于root节点不包括不论什么属性
FbxNode* pRootNode=pScene->GetRootNode();
if(pRootNode)
{
int nodeCount=pRootNode->GetChildCount();
for (int i = 0; i < nodeCount; i++)
{
PrintNode(pRootNode->GetChild(i));
}
}
pSdkManager->Destroy(); return 0;
}
执行结果:
Autodesk FBX SDK Program 中文 (一)的更多相关文章
- Autodesk FBX SDK Program 中文 (二)
这是Autodesk FBX SDK学习笔记第二篇.下面部分汉字翻译自Autodesk FBX SDK Program.翻译人:有道翻译. 上一篇讲了一些FBX SDK的基本操作.创建FbxManag ...
- autodesk fbx sdk sample里面的工程无法调试解决方法
1.项目属性->常规中的目标文件名改为1 2.链接器->调试中的生成程序数据库文件改成:$(OutDir)1.pdb 3.连接器->常规中的输出文件改成:$(OutDir)1.exe ...
- FBX SDK 从2012.1 到 2013.3 变化
==================================================== ============================== 译文 ...
- 基于FBX SDK的FBX模型解析与加载 -(四)
8. 骨骼蒙皮动画 骨骼蒙皮动画是当前游戏引擎中最常用的一种动画方式,关于其基本原理网络上的资料较多,关于到涉及的其它较复杂操作,如插值.融合等在这里也就先不再讨论了,而且其实现方式也与具体引擎的动作 ...
- mingw fbx sdk /浮点数精度
接下来要做一个linux下的程序了. 下载linux version fbx sdk tar zxvf ...gz 按照安装说明 提升权限并没什么用 还是,cannot execute bin ...
- 基于FBX SDK的FBX模型解析与加载 -(一)
http://blog.csdn.net/bugrunner/article/details/7210511 1. 简介 FBX是Autodesk的一个用于跨平台的免费三维数据交换的格式(最早不是由A ...
- Windows Mobile 6.0 SDK和中文模拟器下载
[转] Windows Mobile 6.0 SDK和中文模拟器下载 Windows Mobile 6.5 模拟器 2010年12月06日 星期一 07:48 转载自 zhangyanle86 终于编 ...
- FBX SDK在vs 2010下面的配置
1.下载FBS SDK.地址.因为我是vs2010,所以我下载的是FBX SDK 2016.1.2 VS2010.如果没有了,你可以找博主直接要,QQ1240957820. 2.下载下来的是一个exe ...
- fbx sdk
autodesk fbx review autodesk fbx review http://www.greenxf.com/soft/169025.html autodesk fbx review( ...
随机推荐
- padding Oracle attack(填充Oracle攻击)
最近学习到一种老式的漏洞,一种基于填充字节的漏洞.就想记录下来,早在2010年的blackhat大会上,就介绍了padding Oracle漏洞,并公布了ASP.NET存在该漏洞.2011年又被评选为 ...
- 20162327WJH 实验三 《敏捷开发与XP实践》 实验报告
20162327WJH 实验三 <敏捷开发与XP实践> 实验报告 一.实验内容 1.XP基础 2.XP核心实践 3.相关工具 二.实验要求 1.没有Linux基础的同学建议先学习<L ...
- [YC703]ゴミ拾い Easy
[YC703]ゴミ拾い Easy 题目大意: 二维平面内有\(n(n\le3\times10^5)\)个人和\(n\)个物品,第\(i\)个人在\((a_i,0)\)上,第\(i\)个物品在\((x_ ...
- Markdown---锚点使用
Markdown目前还没有支持文内锚点的标记语法:但是支持html,所以锚点可以通过html语法来实现 使用方法 <a href='#jump'>第一个题目</a> 带有锚点的 ...
- HDU 4611 Balls Rearrangement 数学
Balls Rearrangement 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4611 Description Bob has N balls ...
- 感觉比较好一些的vultr中文网
搜索一波vultr的中文网,发现很多,基本上都是靠活动以及一些SS的教程维持,全都是大同小异,感觉比较有可比性估计一下这个: https://www.thevultr.org/ 可以对比一些美国常用V ...
- Linux可以明文传输密码的工具sshpass
普通ssh只能手动输入密码,但是sshpass可以明文指定密码,但不建议使用,太不安全了.
- 阿里云+django实战记录
2013年7月13日10:36:53:接上篇,bae部署django没成功,转战阿里云.. 阿里云服务器最便宜69/月,现在有个活动,新用户送20元现金券,我就花了RMB 49买了一个,操作系统选的是 ...
- mongodb拷贝数据库copyDatabase()。实现释放磁盘空间的方法。
下面我们一起来看看关于mongodb拷贝数据库copyDatabase().实现释放磁盘空间的方法,希望文章对各位同学会有所帮助. db.copyDatabase("from",& ...
- C#连接SQL Server数据库进行简单操作[转]
环境:VS2010 + SqlServer 2008 首先,按照面向对象的程序设计思想,设计一个数据库操作工具类MyTool.cs,该类中封装了关于数据库连接和操作的方法,各个功能模块在需进行数据库操 ...