天天看點

FBX檔案簡述

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檔案中有一個“場景”,其子節點有一些全局設定資料,以及使用最為頻繁的模型節點,模型節點以及樹狀結構存放于場景的“根節點”中。

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矩陣時需要做轉置。

繼續閱讀