2015-10-15 56 views
8

我想導出一個剝皮的網格。由於某些原因,如果向網格添加蒙皮集羣,FbxSDK會在分段邊緣上打破法線。沒有皮膚,一切看起來都很好。FbxSDK打破正常

實施例: enter image description here

代碼:

FbxLayerElementNormal *layerElementNormal = FbxLayerElementNormal::Create(mesh, ""); 
layerElementNormal->SetMappingMode(FbxLayerElement::eByControlPoint); 
layerElementNormal->SetReferenceMode(FbxLayerElement::eDirect); 

for (int vertIndex = 0; vertIndex < vertexCount; ++vertIndex) 
{ 
    PackedNormal normal = vertices[vertIndex].normal; 
    double x,y,z; 
    x = (((normal.data)  & 0xFF)/127.5f - 1.0f); 
    y = ((((normal.data) >> 8) & 0xFF)/127.5f - 1.0f); 
    z = ((((normal.data) >> 16) & 0xFF)/127.5f - 1.0f); 
    layerElementNormal->GetDirectArray().Add(FbxVector4(x,-y,z)); 
} 

layer->SetNormals(layerElementNormal); 

我tryied不同的映射的mods(例如eByPolygonVertex。)和參照MODS的但至今沒有幫助。似乎法線完全被忽略,如果一個網格有皮膚簇。我註釋了上面的代碼,並且在左圖中看起來像一個皮膚模型。

我也嘗試了不同的3d軟件(Maya 2015,Maya 2013和3ds Max 2013)來查看導出的模型,但所有這些都給了我相同的結果。

P.S.此問題會影響任何蒙皮網格。

編輯 似乎這個問題是FBX管道中的一個錯誤:Autodesk Forum。要繞過我需要的「傳輸屬性」的問題。有人能幫忙嗎?

+2

圖片上的東西真的是我認爲的,還是我需要訪問縮小? – SergeyA

+0

這正是你的想法! – VenoMKO

+0

這很好。對不起,不能幫助實際的問題,但。 – SergeyA

回答

0

蒙皮是一個需要四個組件的過程:x,y,z和重量。對於法線,第四個分量(重量)應該設置爲零。你在你的代碼中嘗試了FbxVector4(x,-y,z,0)嗎?也嘗試
w =(((((normal.data)>> 24)& 0xFF)/ 127.5f-1.0f);
,然後使用FbxVector4(x,-y,z,w);

+0

我想說的是: 您正在丟棄normal.data的前8位,它可能包含有用的w信息。 –

+0

感謝您的回覆。最後一個字節未使用並存儲0xFF。我試圖通過1.0f,0.0f和-1.0f作爲第四個組件,但沒有任何改變。 – VenoMKO