【问题标题】:FbxSDK breaks normalsFbxSDK 打破常规
【发布时间】:2016-01-14 12:08:24
【问题描述】:

我正在尝试导出蒙皮网格。由于某些原因,如果我将皮肤簇添加到网格中,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);

我尝试了不同的映射模块(例如eByPolygonVertex)和参考模块,但到目前为止没有任何帮助。如果网格有皮肤簇,似乎法线会被完全忽略。我注释掉了上面的代码,蒙皮模型看起来像左边的图像。

我还尝试了不同的 3d 软件(Maya 2015、Maya 2013 和 3ds Max 2013)来查看导出的模型,但它们都给了我相同的结果。

附:此问题会影响任何蒙皮网格。

编辑 似乎这个问题是 FBX 管道中的一个错误:Autodesk Forum。要绕过这个问题,我需要“转移属性”。有人可以帮忙吗?

【问题讨论】:

  • 图片上的东西真的是我想象的那样,还是我需要去看心理医生?
  • 这正是你的想法!
  • 那很好。抱歉,无法解决实际问题。

标签: c++ 3d normals fbx


【解决方案1】:

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

【讨论】:

  • 我想说的是:您正在删除可能包含有用 w 信息的 normal.data 的前 8 位。
  • 感谢您的回复。最后一个字节未使用并存储 0xFF。我尝试将 1.0f、0.0f 和 -1.0f 作为第 4 个组件传递,但没有任何改变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
  • 2013-03-27
  • 2020-10-24
相关资源
最近更新 更多