使用SDK對FBX模型的載入與讀取

2021-07-06 08:46:45 字數 2146 閱讀 3895

一.初始化fbx  sdk

fbxmanager* pmanager = null;

fbxscene* pscene = null;

pmanager = fbxmanager::create();

if( !pmanager )

fbxiosettings* ios = fbxiosettings::create(pmanager, iosroot);

pmanager->setiosettings(ios);

pscene = fbxscene::create(pmanager, "my scene");

if( !pscene )

上面**中出現了kfbxiosettings類,這是乙個用來配置kfbxsdkmanage的物件,可以通過這個物件設定一些匯入匯出時的行為,比如可以選擇不匯入材質,動畫等等。

bool loadscene(fbxmanager* pmanager, fbxdocument* pscene, const char* pfilename)

// import the scene.

lstatus = limporter->import(pscene);

// destroy the importer.

limporter->destroy();

return lstatus;

}二.讀取fbx資料

fbx採用的是類似於樹是形式儲存的,因此可以以類似於樹的遞迴方法來遍歷其中的每個結點,並根據結點的屬性選擇合適的處理操作。根節點包含了一系列子節點kfbxnode,每個kfbxnode又有其自己的子節點。kfbxnode包含了座標變換資訊,可以通過一系列get函式取得,其他資料作為kfbxnodeattribute物件,包含在kfbxnode內部,這裡的其他資料是指mesh,nurbs,skeletion,camara,light等定義在kfbxnodeattribute::eattributetype中的型別。乙個kfbxnode可以有多個子kfbxnode ,可以通過kfbxnodeattribute的getattributetype()方法,確定當前node的所包含的實際資料型別:

獲得根結點:kfbxnode

*root 

=scene

->

getrootnode();

遞迴處理每個結點: 

void processnode(kfbxnode* pnode) 

}   

for(int i = 0 ; i < pnode->getchildcount() ; ++i)   }

在fbx的儲存中,每個父結點可以包含多個子結點,但每個子結點只有乙個根結點,而且這其中的聯絡是雙向的,這樣很方便,比如在處理skeleton時就常常需要從子結點中得到父結點的matrix等資訊,而這種雙向關係使得這些操作很容易實現。注意,上述**中有pnode->getnodeattribute()檢查操作是必須的,因為並不是所有的結點都有相應的屬性(attribute也是以子結點的方式關聯到當前的結點上的,因而可能為空)。

void processmesh(kfbxnode* pnode)   

d3dxvector3 vertex[3]; 

d3dxvector4 color[3]; 

d3dxvector3 normal[3]; 

d3dxvector3 tangent[3]; 

d3dxvector2 uv[3][2]; 

int ********count = pmesh->getpolygoncount();

int vertexcounter = 0; 

for(int i = 0 ; i < ********count ; ++i)   

// read the normal of each vertex 

readnormal(pmesh , ctrlpointindex , vertexcounter , &normal[j]); 

// read the tangent of each vertex 

readtangent(pmesh , ctrlpointindex , vertexcounter , &tangent[j]); 

vertexcounter++;  } 

// 根據讀入的資訊組裝三角形,並以某種方式使用即可,比如存入到列表中、儲存到檔案等... } 

}

嶺回歸與sklearn模型的儲存與載入

帶有正則化的線性回歸 嶺回歸api sklearn.linear model.ridge 語法 sklearn.linear model.ridge alpha 1.0 具有l2正則化的線性最小二乘法 alpha 正則化力度 coef 回歸係數 正則化程度的變化,對結果的影響 正則化力度越大,權重越...

嶺回歸與sklearn模型的儲存與載入

帶有正則化的線性回歸 嶺回歸 api sklearn.linear model.ridge 語法 sklearn.linear model.ridge alpha 1.0 具有l2正則化的線性最小二乘法 alpha 正則化力度 coef 回歸係數 正則化程度的變化,對結果的影響 正則化力度越大,權重...

pytorch多卡並行模型的儲存與載入

當模型是在資料並行方式在多卡上進行訓練的訓練和儲存,那麼載入的時候也是一樣需要是多卡。並且,load state dict 函式的呼叫要放在dataparallel 之後,而model.cuda 所在的位置無影響。model definednetwork model torch.nn.paralle...