Esempio n. 1
0
        public void Skin_SetGeometry_SetsGeometry()
        {
            // given:
            var skin = new FbxSkin("");
            var mesh = new FbxMesh("");

            // require:
            Assert.AreEqual(0, skin.GetSrcObjectCount());
            Assert.AreEqual(0, skin.GetDstObjectCount());
            Assert.AreEqual(null, skin.GetGeometry());

            Assert.AreEqual(0, mesh.GetSrcObjectCount());
            Assert.AreEqual(0, mesh.GetDstObjectCount());
            Assert.AreEqual(0, mesh.GetDeformerCount());

            // when:
            skin.SetGeometry(mesh);

            // then:
            Assert.AreEqual(0, skin.GetSrcObjectCount());
            Assert.AreEqual(1, skin.GetDstObjectCount());
            Assert.AreSame(mesh, skin.GetGeometry());

            Assert.AreEqual(1, mesh.GetSrcObjectCount());
            Assert.AreEqual(0, mesh.GetDstObjectCount());
            Assert.AreEqual(1, mesh.GetDeformerCount());
            Assert.AreSame(skin, mesh.GetDeformer(0));
        }
Esempio n. 2
0
        public SkeletonBone(FbxNode boneNode, SkeletonBone parentBone, FbxSkin[] skins, SceneLoader scene)
        {
            //this.scene = scene;
            this.scene = scene;
            Node       = boneNode;
            ParentBone = parentBone;
            //animationTrackKeyFrames = new List<HashSet<double>>();
            cluster = Skeleton.FindCluster(Node, skins, out skin);               //Поиск по всем skins во всех mesh. Можно было бы сделать эффективнее.

            globalMeshTransform = new FbxAMatrix();
            globalMeshTransform.SetIdentity();
            geometryOffset = new FbxAMatrix();
            geometryOffset.SetIdentity();
            if (cluster != null)
            {
                FbxNode meshNode = skin.GetGeometry()?.GetNode();
                if (meshNode != null)
                {
                    globalMeshTransform = meshNode.EvaluateGlobalTransform(FbxExtensions.ToFbxTime(-1));                         // FbxMath.GetGlobalPosition( meshNode, FbxExtensions.ToFbxTime( -1 ), null );
                    geometryOffset      = FbxMath.GetGeometryOffset(meshNode);
                }
            }
            InitialTransform = GetInitialTransform().ToMatrix4();             //Во внешнем коде надо использовать это значение, т.к. результат GetInitialTransform() может зависеть от установленного AnimationTrack
        }