FbxSDK打破了法线

Ven*_*MKO 9 c++ 3d normals fbx

我正在尝试导出蒙皮网格.由于某些原因,如果我将一个皮肤簇添加到网格中,FbxSDK会破坏段边缘的法线.没有皮肤,一切看起来都很好.

例: 在此输入图像描述

码:

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);
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的映射mods(例如eByPolygonVertex)和参考mods,但到目前为止没有任何帮助.如果网格具有皮肤簇,则看起来像法线一样被完全忽略.我评论了上面的代码,皮肤模型看起来像左图上的一个.

我还尝试了不同的3D软件(Maya 2015,Maya 2013和3ds Max 2013)来检查导出的模型,但所有这些都给了我相同的结果.

PS此问题会影响任何蒙皮网格.

编辑 似乎这个问题是FBX管道中的一个错误:Autodesk论坛.为了绕过这个问题,我需要"传输属性".有人能帮忙吗?

小智 0

蒙皮是一个需要四个组成部分的过程:x、y、z 和权重。对于法线,第四个分量(权重)应设置为零。您是否在代码中尝试过 FbxVector4(x,-y,z,0) ?还可以尝试
w = ((((normal.data) >> 24) & 0xFF) / 127.5f - 1.0f);
然后使用 FbxVector4(x,-y,z,w);