Exemple #1
0
        private void processCharacter(Animator animator)
        {
            CharacterPackage chrPack = new CharacterPackage();

            chrPack.rootDag     = vpet.Extensions.getPathString(animator.transform, scene);
            chrPack.rootDagSize = chrPack.rootDag.Length;

            HumanBone[] boneArray = animator.avatar.humanDescription.human;
            chrPack.bMSize      = Enum.GetNames(typeof(HumanBodyBones)).Length;
            chrPack.boneMapping = new String[chrPack.bMSize];
            chrPack.dagSizes    = new int[chrPack.bMSize];


            for (int i = 0; i < boneArray.Length; i++)
            {
                if (boneArray[i].boneName != null)
                {
                    string         enumName = boneArray[i].humanName.Replace(" ", "");
                    HumanBodyBones enumNum;
                    Enum.TryParse <HumanBodyBones>(enumName, true, out enumNum);
                    Transform boneTransform = vpet.Extensions.FindDeepChild(animator.transform, boneArray[i].boneName);
                    chrPack.boneMapping[(int)enumNum] = vpet.Extensions.getPathString(boneTransform, scene);
                    chrPack.dagSizes[(int)enumNum]    = chrPack.boneMapping[(int)enumNum].Length;
                }
            }

            SkeletonBone[] skeletonArray = animator.avatar.humanDescription.skeleton;
            chrPack.sSize           = skeletonArray.Length;
            chrPack.skeletonMapping = new String[chrPack.sSize];
            chrPack.bonePosition    = new float[chrPack.sSize * 3];
            chrPack.boneRotation    = new float[chrPack.sSize * 4];
            chrPack.boneScale       = new float[chrPack.sSize * 3];
            chrPack.sdagSizes       = new int[chrPack.sSize];

            for (int i = 0; i < skeletonArray.Length; i++)
            {
                chrPack.skeletonMapping[i] = skeletonArray[i].name;
                chrPack.sdagSizes[i]       = chrPack.skeletonMapping[i].Length;

                chrPack.bonePosition[i * 3]     = skeletonArray[i].position.x;
                chrPack.bonePosition[i * 3 + 1] = skeletonArray[i].position.y;
                chrPack.bonePosition[i * 3 + 2] = skeletonArray[i].position.z;

                chrPack.boneRotation[i * 4]     = skeletonArray[i].rotation.x;
                chrPack.boneRotation[i * 4 + 1] = skeletonArray[i].rotation.y;
                chrPack.boneRotation[i * 4 + 2] = skeletonArray[i].rotation.z;
                chrPack.boneRotation[i * 4 + 3] = skeletonArray[i].rotation.w;

                chrPack.boneScale[i * 3]     = skeletonArray[i].scale.x;
                chrPack.boneScale[i * 3 + 1] = skeletonArray[i].scale.y;
                chrPack.boneScale[i * 3 + 2] = skeletonArray[i].scale.z;
            }

            characterList.Add(chrPack);
        }
Exemple #2
0
        private void processCharacter(Animator animator)
        {
            CharacterPackage chrPack = new CharacterPackage();

            chrPack.rootId = gameObjectList.IndexOf(animator.transform.gameObject);

            HumanBone[] boneArray = animator.avatar.humanDescription.human;
            chrPack.bMSize      = Enum.GetNames(typeof(HumanBodyBones)).Length;
            chrPack.boneMapping = Enumerable.Repeat(-1, chrPack.bMSize).ToArray <int>();

            for (int i = 0; i < boneArray.Length; i++)
            {
                if (boneArray[i].boneName != null)
                {
                    string         enumName = boneArray[i].humanName.Replace(" ", "");
                    HumanBodyBones enumNum;
                    Enum.TryParse <HumanBodyBones>(enumName, true, out enumNum);
                    Transform boneTransform = vpet.Extensions.FindDeepChild(animator.transform, boneArray[i].boneName);
                    chrPack.boneMapping[(int)enumNum] = gameObjectList.IndexOf(boneTransform.gameObject);
                }
            }

            SkeletonBone[] skeletonArray = animator.avatar.humanDescription.skeleton;
            chrPack.sSize           = skeletonArray.Length;
            chrPack.skeletonMapping = new int[chrPack.sSize];
            chrPack.bonePosition    = new float[chrPack.sSize * 3];
            chrPack.boneRotation    = new float[chrPack.sSize * 4];
            chrPack.boneScale       = new float[chrPack.sSize * 3];

            for (int i = 0; i < skeletonArray.Length; i++)
            {
                chrPack.skeletonMapping[i] = gameObjectList.IndexOf(GameObject.Find(skeletonArray[i].name));

                chrPack.bonePosition[i * 3]     = skeletonArray[i].position.x;
                chrPack.bonePosition[i * 3 + 1] = skeletonArray[i].position.y;
                chrPack.bonePosition[i * 3 + 2] = skeletonArray[i].position.z;

                chrPack.boneRotation[i * 4]     = skeletonArray[i].rotation.x;
                chrPack.boneRotation[i * 4 + 1] = skeletonArray[i].rotation.y;
                chrPack.boneRotation[i * 4 + 2] = skeletonArray[i].rotation.z;
                chrPack.boneRotation[i * 4 + 3] = skeletonArray[i].rotation.w;

                chrPack.boneScale[i * 3]     = skeletonArray[i].scale.x;
                chrPack.boneScale[i * 3 + 1] = skeletonArray[i].scale.y;
                chrPack.boneScale[i * 3 + 2] = skeletonArray[i].scale.z;
            }

            characterList.Add(chrPack);
        }
Exemple #3
0
        private void convertCharacterByteStream()
        {
            m_characterList = new List <CharacterPackage>();

            int dataIdx = 0;

            while (dataIdx < m_characterByteData.Length - 1)
            {
                CharacterPackage characterPack = new CharacterPackage();

                // get bone Mapping size
                characterPack.bMSize = BitConverter.ToInt32(m_characterByteData, dataIdx);
                dataIdx += size_int;

                // get bone Mapping size
                characterPack.sSize = BitConverter.ToInt32(m_characterByteData, dataIdx);
                dataIdx            += size_int;

                // get root dag path
                characterPack.rootId = BitConverter.ToInt32(m_characterByteData, dataIdx);
                dataIdx += size_int;

                // get bone mapping
                characterPack.boneMapping = new int[characterPack.bMSize];
                for (int i = 0; i < characterPack.bMSize; i++)
                {
                    characterPack.boneMapping[i] = BitConverter.ToInt32(m_characterByteData, dataIdx);
                    dataIdx += size_int;
                }

                //get skeleton mapping
                characterPack.skeletonMapping = new int[characterPack.sSize];
                for (int i = 0; i < characterPack.sSize; i++)
                {
                    characterPack.skeletonMapping[i] = BitConverter.ToInt32(m_characterByteData, dataIdx);
                    dataIdx += size_int;
                }

                //get skeleton bone postions
                characterPack.bonePosition = new float[characterPack.sSize * 3];
                for (int i = 0; i < characterPack.sSize; i++)
                {
                    characterPack.bonePosition[i * 3] = BitConverter.ToSingle(m_characterByteData, dataIdx);
                    dataIdx += size_float;
                    characterPack.bonePosition[i * 3 + 1] = BitConverter.ToSingle(m_characterByteData, dataIdx);
                    dataIdx += size_float;
                    characterPack.bonePosition[i * 3 + 2] = BitConverter.ToSingle(m_characterByteData, dataIdx);
                    dataIdx += size_float;
                }

                //get skeleton bone rotations
                characterPack.boneRotation = new float[characterPack.sSize * 4];
                for (int i = 0; i < characterPack.sSize; i++)
                {
                    characterPack.boneRotation[i * 4] = BitConverter.ToSingle(m_characterByteData, dataIdx);
                    dataIdx += size_float;
                    characterPack.boneRotation[i * 4 + 1] = BitConverter.ToSingle(m_characterByteData, dataIdx);
                    dataIdx += size_float;
                    characterPack.boneRotation[i * 4 + 2] = BitConverter.ToSingle(m_characterByteData, dataIdx);
                    dataIdx += size_float;
                    characterPack.boneRotation[i * 4 + 3] = BitConverter.ToSingle(m_characterByteData, dataIdx);
                    dataIdx += size_float;
                }

                //get skeleton bone scales
                characterPack.boneScale = new float[characterPack.sSize * 3];
                for (int i = 0; i < characterPack.sSize; i++)
                {
                    characterPack.boneScale[i * 3] = BitConverter.ToSingle(m_characterByteData, dataIdx);
                    dataIdx += size_float;
                    characterPack.boneScale[i * 3 + 1] = BitConverter.ToSingle(m_characterByteData, dataIdx);
                    dataIdx += size_float;
                    characterPack.boneScale[i * 3 + 2] = BitConverter.ToSingle(m_characterByteData, dataIdx);
                    dataIdx += size_float;
                }


                m_characterList.Add(characterPack);
            }

            Array.Clear(m_objectsByteData, 0, m_objectsByteData.Length);
            m_objectsByteData = null;

            Array.Clear(m_characterByteData, 0, m_characterByteData.Length);
            m_characterByteData = null;

            GC.Collect();
        }
Exemple #4
0
        private void convertCharacterByteStream()
        {
            m_characterList = new List <CharacterPackage>();

            int dataIdx = 0;

            while (dataIdx < m_characterByteData.Length - 1)
            {
                CharacterPackage characterPack = new CharacterPackage();

                // get bone Mapping size
                int intValue = BitConverter.ToInt32(m_characterByteData, dataIdx);
                dataIdx += size_int;
                characterPack.bMSize = intValue;

                // get bone Mapping size
                intValue            = BitConverter.ToInt32(m_characterByteData, dataIdx);
                dataIdx            += size_int;
                characterPack.sSize = intValue;

                // get root dag size
                intValue = BitConverter.ToInt32(m_characterByteData, dataIdx);
                dataIdx += size_int;
                characterPack.rootDagSize = intValue;

                // get root dag path
                byte[] rootDagByte = new byte[intValue];
                Buffer.BlockCopy(m_characterByteData, dataIdx, rootDagByte, 0, intValue);
                dataIdx += intValue;
                characterPack.rootDag = Encoding.ASCII.GetString(rootDagByte);

                // get dag sizes
                characterPack.dagSizes = new int[characterPack.bMSize];
                for (int i = 0; i < characterPack.bMSize; i++)
                {
                    characterPack.dagSizes[i] = BitConverter.ToInt32(m_characterByteData, dataIdx);
                    dataIdx += size_int;
                }

                // get bone mapping
                characterPack.boneMapping = new string[characterPack.bMSize];
                for (int i = 0; i < characterPack.bMSize; i++)
                {
                    int    stringSize = characterPack.dagSizes[i];
                    byte[] dagByte    = new byte[stringSize];
                    Buffer.BlockCopy(m_characterByteData, dataIdx, dagByte, 0, stringSize);
                    dataIdx += stringSize;
                    characterPack.boneMapping[i] = Encoding.ASCII.GetString(dagByte);
                }

                // get dag skeleton sizes
                characterPack.sdagSizes = new int[characterPack.sSize];
                for (int i = 0; i < characterPack.sSize; i++)
                {
                    characterPack.sdagSizes[i] = BitConverter.ToInt32(m_characterByteData, dataIdx);
                    dataIdx += size_int;
                }

                //get skeleton mapping
                characterPack.skeletonMapping = new string[characterPack.sSize];
                for (int i = 0; i < characterPack.sSize; i++)
                {
                    int    stringSize = characterPack.sdagSizes[i];
                    byte[] sdagByte   = new byte[stringSize];
                    Buffer.BlockCopy(m_characterByteData, dataIdx, sdagByte, 0, stringSize);
                    dataIdx += stringSize;
                    characterPack.skeletonMapping[i] = Encoding.ASCII.GetString(sdagByte);
                }

                //get skeleton bone postions
                characterPack.bonePosition = new float[characterPack.sSize * 3];
                for (int i = 0; i < characterPack.sSize; i++)
                {
                    characterPack.bonePosition[i * 3] = BitConverter.ToSingle(m_characterByteData, dataIdx);
                    dataIdx += size_float;
                    characterPack.bonePosition[i * 3 + 1] = BitConverter.ToSingle(m_characterByteData, dataIdx);
                    dataIdx += size_float;
                    characterPack.bonePosition[i * 3 + 2] = BitConverter.ToSingle(m_characterByteData, dataIdx);
                    dataIdx += size_float;
                }

                //get skeleton bone rotations
                characterPack.boneRotation = new float[characterPack.sSize * 4];
                for (int i = 0; i < characterPack.sSize; i++)
                {
                    characterPack.boneRotation[i * 4] = BitConverter.ToSingle(m_characterByteData, dataIdx);
                    dataIdx += size_float;
                    characterPack.boneRotation[i * 4 + 1] = BitConverter.ToSingle(m_characterByteData, dataIdx);
                    dataIdx += size_float;
                    characterPack.boneRotation[i * 4 + 2] = BitConverter.ToSingle(m_characterByteData, dataIdx);
                    dataIdx += size_float;
                    characterPack.boneRotation[i * 4 + 3] = BitConverter.ToSingle(m_characterByteData, dataIdx);
                    dataIdx += size_float;
                }

                //get skeleton bone scales
                characterPack.boneScale = new float[characterPack.sSize * 3];
                for (int i = 0; i < characterPack.sSize; i++)
                {
                    characterPack.boneScale[i * 3] = BitConverter.ToSingle(m_characterByteData, dataIdx);
                    dataIdx += size_float;
                    characterPack.boneScale[i * 3 + 1] = BitConverter.ToSingle(m_characterByteData, dataIdx);
                    dataIdx += size_float;
                    characterPack.boneScale[i * 3 + 2] = BitConverter.ToSingle(m_characterByteData, dataIdx);
                    dataIdx += size_float;
                }


                m_characterList.Add(characterPack);
            }

            Array.Clear(m_characterByteData, 0, m_characterByteData.Length);
            m_characterByteData = null;
            GC.Collect();
        }