1. 關于FBX
Autodesk FBX是Autodesk公司出品的一款用于跨平台的免費三維創作與交換格式的軟體,通過FBX使用者能通路大多數三維供應商的三維檔案。FBX 檔案格式支援所有主要的三維資料元素以及二維、音頻和視訊媒體元素。
FBX由Kaydara開發并于2006年被AUTODESK收購。
參考 https://en.wikipedia.org/wiki/FBX
2. 關于FBX SDK
Autodesk為FBX檔案提供了一套C++ SDK,可以使使用者擁有讀取、寫入FBX檔案的能力。SDK下載下傳位址:http://usa.autodesk.com/adsk/servlet/pc/item?siteID=123112&id=24535361
SDK文檔位址: http://help.autodesk.com/view/FBX/2016/ENU/
FBX SDK論壇位址:http://forums.autodesk.com/t5/fbx/ct-p/area-c7
3. FBX檔案格式簡介:
FBX資料以樹狀結構存儲在檔案中,每個FBX檔案中有一個“場景”,其子節點有一些全局設定資料,以及使用最為頻繁的模型節點,模型節點以及樹狀結構存放于場景的“根節點”中。
4. FBX模型節點:
FBX模型節點(FBXNode)可以視作幾何模型的一個包裝(Wrapper),節點本身并不包含太多的幾何資訊,其幾何資訊主要儲存在其所持有的節點屬性(FBXNodeAttribute)中。
模型節點最主要的作用是在模型樹上維護樹狀結構,除此之外,FbxNode還儲存了一些矩陣變換資訊以及材質資訊。
5. FBX模型屬性:
FBX模型屬性(FbxNodeAttribute)作為FbxNode中的成員,它定義了該節點所表示的元素,如光源、相機或幾何元素等。
6. FBX網格:
FBX網格(FbxMexh)繼承于FbxNodeAttribute,用來表示FBX節點中的網格圖元,其基本資訊有:
a. 控制點清單control Points/ vertices;
b. 多邊形清單polygons;
c. 一系列的層(FbxLayer),用來儲存網格的法向、貼圖以及材質資訊。
7. FBX矩陣變換:
FBX檔案中的矩陣變換比較複雜,每個FbxNode中有3個轉換矩陣,分别是
a. LocalTransform 本地轉換矩陣,這個轉換矩陣是指節點相對于父節點的變換,局部變換可以通過FbxNode::EvaluateLocalTransform()函數獲得;
b. GlobalTransform 全局變換,這個轉換矩陣是指節點相對于世界坐标的變換,全局變換可以通過FbxNode::EvaluateGlobalTransform()函數獲得,也可以由節點本身開始,獲得上層所有節點的轉換進行疊加獲得。
c. GeometricTransform 實體變換,這個變換矩陣與其他節點無關,可以視作節點的幾何資料相對于節點自身的坐标系的一個轉換,獲得實體變換的方法是
FbxAMatrix matrixGeo;
matrixGeo.SetIdentity();
if (node->GetNodeAttribute())
{
const FbxVector4 lT = node->GetGeometricTranslation(FbxNode::eSourcePivot);
const FbxVector4 lR =node->GetGeometricRotation(FbxNode::eSourcePivot);
const FbxVector4 lS =node->GetGeometricScaling(FbxNode::eSourcePivot);
matrixGeo.SetT(lT);
matrixGeo.SetR(lR);
matrixGeo.SetS(lS);
}
終上所述,要獲得一個網格資料相對于全局的變換可以使用GlobalTranform * GeometricTransform獲得。另外需要注意的是FBX的矩陣是基于列的,轉為Hidas矩陣時需要做轉置。