예제 #1
0
        private void AddMorphToMesh(FBXScene pScene, FBXNode pFbxNode, List <Vector> morph)
        {
            FBXShape lShape = FBXShape.Create(pScene, "MorphShape");
            FBXMesh  mesh   = (FBXMesh)pFbxNode.GetMesh();
            int      count  = mesh.GetControlPointsCount();

            lShape.InitControlPoints(count);
            List <FBXVector4> lControlPoints = lShape.GetControlPoints();

            for (int i = 0; i < count; i++)
            {
                FBXVector4 cp = new FBXVector4(morph[i].members[0] * exportScale,
                                               morph[i].members[1] * exportScale,
                                               morph[i].members[2] * exportScale,
                                               0);
                lControlPoints[i] = cp;
            }
            lShape.SetControlPoints(lControlPoints);

            FBXBlendShape        lBlendShape        = FBXBlendShape.Create(pScene, "morph");
            FBXBlendShapeChannel lBlendShapeChannel = FBXBlendShapeChannel.Create(pScene, "morphchannel");

            mesh.AddDeformer(lBlendShape);
            lBlendShape.AddBlendShapeChannel(lBlendShapeChannel);
            lBlendShapeChannel.AddTargetShape(lShape);
        }
 void FbxsdkBuildHierachy(FBXNode fbxNode, SkeletonNode parentNode, Dictionary<SkeletonNode, FBXMesh> outputMeshDict)
 {
     var node = new SkeletonNode();
     node.Name = fbxNode.GetName();
     node.PoseMatrix = FbxsdkConvertMatrix(fbxNode.GetLocalTransform());
     node.Parent = parentNode;
     if (parentNode == null) skeleton = node;
     else parentNode.Children.Add(node);
     var mesh = fbxNode.GetMesh() ;
     if(mesh != null)
     {
         outputMeshDict[node] = mesh;
     }
     if (skeletonNodeDict.ContainsKey(node.Name))
     {
         Debug.Log("Found duplicated skeleton node name: " + node.Name);
     }
     else
     {
         skeletonNodeDict.Add(node.Name, node);
     }
     for (int i = 0; i < fbxNode.GetChildCount(); ++i)
     {
         FbxsdkBuildHierachy(fbxNode.GetChild(i), node, outputMeshDict);
     }
 }