Пример #1
0
        private SklbFile initSkele(string path)
        {
            realm.Packs.TryGetFile(path, out File sklb);
            SklbFile skl = new SklbFile(sklb);

            return(skl);
        }
Пример #2
0
        public Skeleton(SklbFile file)
        {
            this.File = file;

            _UnmanagedPtr = HavokInterop.Execute(() => Interop.loadSkeleton(file.HavokData, file.HavokData.Length));

            BoneCount = HavokInterop.Execute(() => Interop.getNumBones(_UnmanagedPtr));

            BoneNames = new string[BoneCount];
            HavokInterop.Execute(() => Interop.getBoneNames(_UnmanagedPtr, BoneNames));

            ParentBoneIndices = new int[BoneCount];
            HavokInterop.Execute(() => Interop.getParentIndices(_UnmanagedPtr, ParentBoneIndices));

            ReferencePose = new Matrix[BoneCount];
            var referencePoseLocal = new InteropTransform[BoneCount];

            HavokInterop.Execute(() => Interop.getReferencePose(_UnmanagedPtr, referencePoseLocal));
            for (var target = 0; target < BoneCount; ++target)
            {
                var current = target;
                ReferencePose[target] = Matrix.Identity;
                while (current >= 0)
                {
                    ReferencePose[target] = ReferencePose[target] * referencePoseLocal[current].ToTransformationMatrix();

                    current = ParentBoneIndices[current];
                }
            }
        }
Пример #3
0
        private bool _IsDisposed = false; // To detect redundant calls

        #endregion Fields

        #region Constructors

        public Skeleton(SklbFile file)
        {
            this.File = file;

            _UnmanagedPtr = HavokInterop.Execute(() => Interop.loadSkeleton(file.HavokData, file.HavokData.Length));

            BoneCount = HavokInterop.Execute(() => Interop.getNumBones(_UnmanagedPtr));

            BoneNames = new string[BoneCount];
            HavokInterop.Execute(() => Interop.getBoneNames(_UnmanagedPtr, BoneNames));

            ParentBoneIndices = new int[BoneCount];
            HavokInterop.Execute(() => Interop.getParentIndices(_UnmanagedPtr, ParentBoneIndices));

            ReferencePose = new Matrix[BoneCount];
            var referencePoseLocal = new InteropTransform[BoneCount];
            HavokInterop.Execute(() => Interop.getReferencePose(_UnmanagedPtr, referencePoseLocal));
            for (var target = 0; target < BoneCount; ++target) {
                var current = target;
                ReferencePose[target] = Matrix.Identity;
                while (current >= 0) {
                    ReferencePose[target] = ReferencePose[target] * referencePoseLocal[current].ToTransformationMatrix();

                    current = ParentBoneIndices[current];
                }
            }
        }