コード例 #1
0
ファイル: Mesh.cs プロジェクト: zhangxv12138/SB3Utility
        public void LoadFrom(Stream stream)
        {
            BinaryReader reader = new BinaryReader(stream);

            m_Name = reader.ReadNameA4();

            int numSubMeshes = reader.ReadInt32();

            m_SubMeshes = new List <SubMesh>(numSubMeshes);
            for (int i = 0; i < numSubMeshes; i++)
            {
                m_SubMeshes.Add(new SubMesh(stream));
            }

            m_Shapes = new BlendShapeData(stream);

            int numBones = reader.ReadInt32();

            m_BindPose = new List <Matrix>(numBones);
            for (int i = 0; i < numBones; i++)
            {
                m_BindPose.Add(reader.ReadMatrix());
            }

            int numHashes = reader.ReadInt32();

            m_BoneNameHashes = new List <uint>(numHashes);
            for (int i = 0; i < numHashes; i++)
            {
                m_BoneNameHashes.Add(reader.ReadUInt32());
            }

            m_RootBoneNameHash          = reader.ReadUInt32();
            m_MeshCompression           = reader.ReadByte();
            m_StreamCompression         = reader.ReadByte();
            m_IsReadable                = reader.ReadBoolean();
            m_KeepVertices              = reader.ReadBoolean();
            m_KeepIndices               = reader.ReadBoolean();
            reader.BaseStream.Position += 3;

            int numIndexBytes = reader.ReadInt32();

            m_IndexBuffer = reader.ReadBytes(numIndexBytes);
            if ((numIndexBytes & 3) > 0)
            {
                reader.BaseStream.Position += 4 - (numIndexBytes & 3);
            }

            int numInfluences = reader.ReadInt32();

            m_Skin = new List <BoneInfluence>(numInfluences);
            for (int i = 0; i < numInfluences; i++)
            {
                m_Skin.Add(new BoneInfluence(stream));
            }

            m_VertexData     = new VertexData(stream);
            m_CompressedMesh = new CompressedMesh(stream);
            m_LocalAABB      = new AABB(stream);
            m_MeshUsageFlags = reader.ReadInt32();
        }
コード例 #2
0
ファイル: Mesh.cs プロジェクト: hejob/SB3Utility
        public void LoadFrom(Stream stream)
        {
            BinaryReader reader = new BinaryReader(stream);
            m_Name = reader.ReadNameA4();

            int numSubMeshes = reader.ReadInt32();
            m_SubMeshes = new List<SubMesh>(numSubMeshes);
            for (int i = 0; i < numSubMeshes; i++)
            {
                m_SubMeshes.Add(new SubMesh(stream));
            }

            m_Shapes = new BlendShapeData(stream);

            int numBones = reader.ReadInt32();
            m_BindPose = new List<Matrix>(numBones);
            for (int i = 0; i < numBones; i++)
            {
                m_BindPose.Add(reader.ReadMatrix());
            }

            int numHashes = reader.ReadInt32();
            m_BoneNameHashes = new List<uint>(numHashes);
            for (int i = 0; i < numHashes; i++)
            {
                m_BoneNameHashes.Add(reader.ReadUInt32());
            }

            m_RootBoneNameHash = reader.ReadUInt32();
            m_MeshCompression = reader.ReadByte();
            m_StreamCompression = reader.ReadByte();
            m_IsReadable = reader.ReadBoolean();
            m_KeepVertices = reader.ReadBoolean();
            m_KeepIndices = reader.ReadBoolean();
            reader.BaseStream.Position += 3;

            int numIndexBytes = reader.ReadInt32();
            m_IndexBuffer = reader.ReadBytes(numIndexBytes);
            if ((numIndexBytes & 3) > 0)
            {
                reader.BaseStream.Position += 4 - (numIndexBytes & 3);
            }

            int numInfluences = reader.ReadInt32();
            m_Skin = new List<BoneInfluence>(numInfluences);
            for (int i = 0; i < numInfluences; i++)
            {
                m_Skin.Add(new BoneInfluence(stream));
            }

            m_VertexData = new VertexData(stream);
            m_CompressedMesh = new CompressedMesh(stream);
            m_LocalAABB = new AABB(stream);
            m_MeshUsageFlags = reader.ReadInt32();
        }
コード例 #3
0
ファイル: Mesh.cs プロジェクト: kkdevs/sb3u
        public void LoadFrom(Stream stream)
        {
            BinaryReader reader = new BinaryReader(stream);

            m_Name = reader.ReadNameA4U8();

            int numSubMeshes = reader.ReadInt32();

            m_SubMeshes = new List <SubMesh>(numSubMeshes);
            for (int i = 0; i < numSubMeshes; i++)
            {
                m_SubMeshes.Add(new SubMesh(stream));
            }

            m_Shapes = new BlendShapeData(stream);

            int numBones = reader.ReadInt32();

            m_BindPose = new List <Matrix>(numBones);
            for (int i = 0; i < numBones; i++)
            {
                m_BindPose.Add(reader.ReadMatrix());
            }

            int numHashes = reader.ReadInt32();

            m_BoneNameHashes = new List <uint>(numHashes);
            for (int i = 0; i < numHashes; i++)
            {
                m_BoneNameHashes.Add(reader.ReadUInt32());
            }

            m_RootBoneNameHash = reader.ReadUInt32();
            m_MeshCompression  = reader.ReadByte();
            if (file.VersionNumber < AssetCabinet.VERSION_5_0_0)
            {
                m_StreamCompression = reader.ReadByte();
            }
            else
            {
                m_StreamCompression = 1;
            }
            m_IsReadable   = reader.ReadBoolean();
            m_KeepVertices = reader.ReadBoolean();
            m_KeepIndices  = reader.ReadBoolean();
            if (file.VersionNumber < AssetCabinet.VERSION_5_0_0)
            {
                reader.BaseStream.Position += 3;
            }

            int numIndexBytes = reader.ReadInt32();

            m_IndexBuffer = reader.ReadBytes(numIndexBytes);
            if ((numIndexBytes & 3) > 0)
            {
                reader.BaseStream.Position += 4 - (numIndexBytes & 3);
            }

            int numInfluences = reader.ReadInt32();

            m_Skin = new List <BoneInfluence>(numInfluences);
            for (int i = 0; i < numInfluences; i++)
            {
                m_Skin.Add(new BoneInfluence(stream));
            }

            m_VertexData     = new VertexData(stream, m_StreamCompression > 0 || file.VersionNumber >= AssetCabinet.VERSION_5_0_0);
            m_CompressedMesh = new CompressedMesh(stream, file.VersionNumber);
            m_LocalAABB      = new AABB(stream);
            m_MeshUsageFlags = reader.ReadInt32();
            if (file.VersionNumber >= AssetCabinet.VERSION_5_0_0)
            {
                int numMeshBytes = reader.ReadInt32();
                m_BakedConvexCollisionMesh = reader.ReadBytes(numMeshBytes);
                if ((numMeshBytes & 3) > 0)
                {
                    stream.Position += 4 - (numMeshBytes & 3);
                }

                numMeshBytes = reader.ReadInt32();
                m_BakedTriangleCollisionMesh = reader.ReadBytes(numMeshBytes);
                if ((numMeshBytes & 3) > 0)
                {
                    stream.Position += 4 - (numMeshBytes & 3);
                }
            }
        }