Autodesk FBX SDK Program 中文 (一)

这是我的FBX SDK学习笔记。如文有错误。麻烦各位大大指出

为什么要使用FBX SDK?

由于3D建模软件都被AutoDesk收购了。FBX能够在各个建模软件之间互相导入导出,在非常多游戏引擎中也用FBX来直接导入然后编辑。

学会使用FBX SDK后该干什么?

用FBX SDK解析出在fbx文件里保存的顶点、骨骼、贴图、灯光、法线等信息后,保存为自己的模型格式或者直接渲染出来。嗯。对。FBX是作为中间件存在,不会直接用在游戏中。

要直接贴代码了。

代码中会有一些中文的解释。出自有道翻译……

首先看看环境配置,一个普通的空project。

加入头文件路径:

加入链接文件文件夹:

加入链接文件:

阿嘞,没有链接文件。

我们在代码里面把lib加进来就好了。

复制dll文件到debug文件夹:

还缺一个 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;
}

执行结果:

时间: 2024-11-08 16:45:33

Autodesk FBX SDK Program 中文 (一)的相关文章

Autodesk FBX SDK Program 中文 (二)

这是Autodesk FBX SDK学习笔记第二篇,以下部分汉字翻译自Autodesk FBX SDK Program,翻译人:有道翻译. 上一篇讲了一些FBX SDK的基本操作,创建FbxManager这些,也写了我们第一个FBX SDK 的例子. 今天是FBX SDK指南的第二篇,创建一个FBX文件转换器,有什么用? 把FBX转换成DAE.Obj这些格式啦!把FBX 二进制转换成文本格式啦! 这一篇的知识点: 1.FbxManager的创建与销毁 2.FbxImporter的创建与使用 3.

FBX SDK 从2012.1 到 2013.3 变化

==================================================== ============================== 译文                                   自述文件 Autodesk FBX SDK 2013.3,2012年9月11日 1.新功能和弃用功能------------------------------ 1.1新功能        *类FbxCameraManipulator已经改进,使FrameA

mingw fbx sdk /浮点数精度

接下来要做一个linux下的程序了. 下载linux version     fbx sdk tar zxvf ...gz 按照安装说明 提升权限并没什么用 还是,cannot execute binary file 感觉是版本的问题,也就是说我要用f extension bx sdk这个版本 是dll的 vs跑完用mingw windows + vs2013用的肯定是 febx sdk windows version mingw 下面,据说那只是gcc而不意味着 linux所以...也许还是要

fbx sdk

autodesk fbx review autodesk fbx review http://www.greenxf.com/soft/169025.html autodesk fbx review(三维角色动画制作工具)V1.4.2 官方版 Autodesk FBX FBX Software Development Kit http://usa.autodesk.com/adsk/servlet/pc/item?siteID=123112&id=26416130

Windows Mobile 6.0 SDK和中文模拟器下载

[转] Windows Mobile 6.0 SDK和中文模拟器下载 Windows Mobile 6.5 模拟器 2010年12月06日 星期一 07:48 转载自 zhangyanle86 终于编辑 zhangyanle86 Windows Mobile 6.0 SDK和中文模拟器下载 SDK 6.0下载页面:http://www.microsoft.com/downloads/details.aspx?familyid=06111A3A-A651-4745-88EF-3D48091A390

Autodesk Cloud Accelerator Program 开始报名

如果你没有注意到这个消息,那你就会错过一个前往旧金山和硅谷工程师一起工作数周的机会. 摘要一下: 时间: 1月10前提交你的提案,3月飞往旧金山 地点: 旧金山. 包住宿哦~ 不过,既然要去美国,既然要面对面交流,那肯定需要你英语交流无障碍.详情请了解 http://adndevblog.typepad.com/cloud_and_mobile/2014/11/get-ready-for-the-autodesk-cloud-accelerator-program.html

FBX Software Development Kit

FBX Software Development Kit The FBX Software Development Kit (FBX SDK) allows software developers to create applications that use FBX technology, or to integrate FBX technology into their existing applications. Note that the FBX SDK is not covered b

FBX BlendShape/Morph动画解析

目前fbx 2015.1中支持三种变形器:skinDeformer,blendShapeDeformer,vertexCacheDeformer.定义在fbxdeformer.h中: enum EDeformerType { eUnknown, //!< Unknown deformer type eSkin, //!< Type FbxSkin eBlendShape, //!< Type FbxBlendShape eVertexCache //!< Type FbxVerte

Cardboard Unity SDK Reference 翻译版

最近正在准备雅思,趁机翻译了Cardboard的文档,这个文档挂在谷歌官网上,不翻墙根本看不了,翻了墙这个网页也很不稳定,经常上不去,所以就搬运了过来,不过我英语水平实在有限,这次翻译也是对自己的一次锻炼,有的地方我自己明白但是也很难表述好,还请大神轻喷. 里面有很多奇怪的词汇查不到,都是我自己猜着翻译的,还有的词查到了也不知道是啥,比如"剔除掩膜"啥的-,翻译工作量也很大,都是我自己挤时间翻译的,还请大神们指出翻译的不好的地方,英文版请见我上一篇博客:http://blog.csdn