2015-10-15 57 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