FBX SDK 总结之矩阵(Transform)

FBX中的Node的变换矩阵主要是通过FbxNode::EvaluateGlobalTransform(FbxTime)与FbxNode::EvaluateLocalTransform(FbxTime)这两个API获取, 通过字面意思我们就可以得知第一个得到的是Node的本地到世界空间变换矩阵,第二个则是Node的本地到父节点空间变换矩阵。如果不考虑动画影响FbxTime参数可忽略。这里我主要想说下的是有时候我们使用这两个矩阵变换出的模型的位置不正确会有偏差,经过自己的测试验证发现是因为还有一个Geometric矩阵需要考虑进来, 在SDK文档中找到相关信息对FbxNode的转换矩阵算是做了比较详细的介绍可以参考SDK Document中Nodes and Scene Graph >> FBX Nodes中的内容,其中关于Geometric矩阵有如下说明

Geometric Transformation Properties

The FbxNode geometric transformation properties (FbxNode::GeometricTranslationFbxNode::GeometricRotation, andFbxNode::GeometricScaling) describe how a FbxNodeAttribute is offset from the FbxNode's local frame of reference. These geometric transforms are applied to the FbxNodeAttribute after the FbxNode's local transforms are computed, and are not inherited across the node hierarchy.

NoteThe geometric transformation properties are related to how 3ds Max represents pivot information. It is comparable to 3ds Max's object-offset transformation.

通过上述信息我们可以得知Geometric矩阵是为了兼容3dmax中模型的偏移矩阵的概念而设计的,也即意味着解析通过3dmax导出的FBX文件,计算Node的变换矩阵时必须将Geometric矩阵也计算在内。若是如Maya之类的建模软件导出的FBX文件,可不考虑Geometric矩阵,即使考虑也不会影响到模型的最终方位变换,因为此时的Geometric矩阵总是单位矩阵,为了兼容性和统一性,我们还是每次计算Node的变换矩阵都将Geometric矩阵也计算在内,代码如下:

得到当前Node的Geometric矩阵

FbxAMatrix GetNodeGeometryTransform(FbxNode* pNode)
{
	FbxAMatrix matrixGeo;
	matrixGeo.SetIdentity();

	if(pNode->GetNodeAttribute())
	{
		const FbxVector4 lT = pNode->GetGeometricTranslation(FbxNode::eSourcePivot);
		const FbxVector4 lR = pNode->GetGeometricRotation(FbxNode::eSourcePivot);
		const FbxVector4 lS = pNode->GetGeometricScaling(FbxNode::eSourcePivot);

		matrixGeo.SetT(lT);
		matrixGeo.SetR(lR);
		matrixGeo.SetS(lS);
	}

	return matrixGeo;
}


得到当前Node的本地到世界空间变换矩阵

FbxAMatrix GetNodeWorldTransform(FbxNode* pNode)
{
	FbxAMatrix matrixL2W;
	matrixL2W.SetIdentity();

	if(NULL== pNode)
	{
		return matrixL2W;
	}

	matrixL2W=pNode->EvaluateGlobalTransform();

	FbxAMatrix matrixGeo=GetNodeGeometryTransform(pNode);

	matrixL2W*=matrixGeo;

	return matrixL2W;
}

如SDK 文档所说 Geometric矩阵是不能被继承的,也即意味着不能参与父子Node矩阵的累积运算,对于子Node而言的父Node的矩阵是不包含Geometric矩阵,现举例说明,A为父Node,B为儿子Node,C为孙子Node,

通过矩阵累积求得Node C的本地到世界空间变换矩阵

matrixA=nodeA.EvaluateLocalTransform();
matrixB=nodeA.EvaluateLocalTransform();
matrixC=nodeC.EvaluateLocalTransform();
matrixC=matrixA*matrixB*matrixC*GetNodeGeometryTransform(pNodeC);

我个人觉得可以这样理解Geometric矩阵,在FbxNode空间下还存在着一个Geometry空间,通过Geometric矩阵可以将几何元素如顶点从Geometry空间转换到FbxNode空间,而后就可以利用FbxNode的继承树进行进一步的空间变换。


SDK Document 下载和在线查看链接 http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=16707768

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: FBX SDK for Unity是为Unity游戏引擎设计的一种软件开发工具包(SDK)。FBX SDK是由Autodesk开发的一套用于处理和管理FBX文件格式的工具。FBX是一种常见的3D文件格式,用于在不同的3D应用程序之间进行互操作。使用FBX SDK,开发人员可以轻松地将FBX文件导入到Unity中,以便在游戏中使用。 FBX SDK for Unity提供了一些功能,使开发人员能够更好地在Unity中处理和管理FBX文件。首先,它允许开发人员读取和写入FBX文件。开发人员可以使用FBX SDK在Unity中读取FBX文件的内容,例如模型、材质、动画等,并将其转换为Unity能够使用的数据格式。相反地,开发人员还可以使用FBX SDK将Unity中的内容导出为FBX文件,以便在其他应用程序中使用。 其次,FBX SDK for Unity还提供了一些用于编辑和处理FBX文件的工具和函数。开发人员可以使用FBX SDK更改模型的层次结构、材质属性、动画轨迹等。这使得开发人员能够更好地控制和调整FBX文件以适应他们的游戏需求。 此外,FBX SDK for Unity还提供了一些用于导入和导出FBX文件的辅助功能。开发人员可以使用FBX SDK处理FBX文件的单位、坐标系、标记和动画设置等。这些功能可以让开发人员更加方便地与FBX文件进行交互,并确保在不同应用程序之间进行正确的数据转换。 总之,FBX SDK for Unity是一个非常有用的工具包,使开发人员能够更好地在Unity中处理和管理FBX文件,并与其他3D应用程序进行交互和互操作。它为开发人员提供了更多的灵活性和控制权,以实现他们的游戏开发目标。 ### 回答2: FBX SDK for Unity是一款Unity引擎的插件,用于导入和导出FBX文件格式。FBX文件是一种用于在不同3D软件之间交换模型、动画、材质等数据的通用文件格式。 FBX SDK for Unity提供了许多有用的功能和工具,可以帮助开发者更轻松地在Unity中使用FBX文件。通过该插件,开发者可以导入FBX文件,并将其转换为Unity中可用的资源,如3D模型、骨骼动画、材质、贴图等。同时,开发者也可以将Unity中的资源导出为FBX文件,以便与其他支持FBX格式的软件进行交流和共享。 FBX SDK for Unity还支持模型的网格优化、纹理压缩和骨骼动画的精细调整。通过可以控制导入和导出设置,开发者可以根据需求对FBX文件进行自定义处理,以获得更好的效果和性能。 除此之外,FBX SDK for Unity还提供了一些扩展工具,用于处理FBX文件中的蒙皮、法线、顶点色等数据,以及支持多个FBX文件的批量操作。 总之,FBX SDK for Unity是一款功能强大的插件,提供了导入和导出FBX文件的功能,以帮助Unity开发者更好地使用FBX文件,并加强与其他3D软件的兼容性和交互性。无论是从外部软件导入资源,还是将Unity资源导出到其他软件使用,FBX SDK for Unity都是一个非常有用的工具。 ### 回答3: FBX SDK for Unity是一种用于Unity开发环境的软件开发工具包,用于处理和加载FBX文件格式。FBX文件是一种常用的3D模型和动画文件格式,广泛用于游戏开发和动画制作等领域。 通过FBX SDK for Unity,开发者可以在Unity中轻松地导入、加载和展示来自于FBX文件的3D模型和动画。这个SDK提供了一系列功能强大的工具和接口,可以处理FBX文件中的各种元素,如网格、材质、动画、骨骼等等。开发者可以使用这些工具和接口来编辑、控制和操纵FBX模型和动画,在游戏中实现各种效果和功能。 FBX SDK for Unity还支持多种模型和动画文件的转换和导出功能。这意味着开发者可以将FBX文件转换为其他格式,如Unity支持的模型和动画格式,以便在不同的开发环境中使用。同时,也可以将Unity中创建的模型和动画导出为FBX文件,用于与其他软件或平台进行交互和共享。 FBX SDK for Unity为开发者提供了更多的选择和自由,使他们能够更灵活地使用FBX文件中的资源。通过这个SDK,开发者可以更加高效地创建和操作3D模型和动画,加快开发进度,并实现更具创意和吸引力的游戏效果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值