示例#1
0
        public static ExtractedM2 Process(string basePath, MapId mapId, string path)
        {
            basePath = Path.Combine(basePath, mapId.ToString());
            var filePath = Path.Combine(basePath, path);
            filePath = Path.ChangeExtension(filePath, ".m2x");

            if (!File.Exists(filePath))
            {
                throw new FileNotFoundException("Extracted M2 file not found: {0}", filePath);
            }

            var m2 = new ExtractedM2();

            using(var file = File.OpenRead(filePath))
            using(var br = new BinaryReader(file))
            {
                var type = br.ReadString();
                if (type != fileType)
                {
                    br.Close();
                    throw new InvalidDataException(string.Format("M2x file in invalid format: {0}", filePath));
                }

                m2.Extents = br.ReadBoundingBox();
                m2.BoundingVertices = br.ReadVector3List();
                m2.BoundingTriangles = br.ReadIndex3List();

                br.Close();
            }

            return m2;
        }
示例#2
0
        public static ExtractedM2 Process(string basePath, MapId mapId, string path)
        {
            basePath = Path.Combine(basePath, mapId.ToString());
            var filePath = Path.Combine(basePath, path);

            filePath = Path.ChangeExtension(filePath, ".m2x");

            if (!File.Exists(filePath))
            {
                throw new FileNotFoundException("Extracted M2 file not found: {0}", filePath);
            }

            var m2 = new ExtractedM2();

            using (var file = File.OpenRead(filePath))
                using (var br = new BinaryReader(file))
                {
                    var type = br.ReadString();
                    if (type != fileType)
                    {
                        br.Close();
                        throw new InvalidDataException(string.Format("M2x file in invalid format: {0}", filePath));
                    }

                    m2.Extents           = br.ReadBoundingBox();
                    m2.BoundingVertices  = br.ReadVector3List();
                    m2.BoundingTriangles = br.ReadIndex3List();

                    br.Close();
                }

            return(m2);
        }
示例#3
0
        private static void Transform(ExtractedM2 m2, ExtractedMapM2Definition def)
        {
            for (var i = 0; i < m2.BoundingVertices.Count; i++)
            {
                // Scale and transform
                var vertex = m2.BoundingVertices[i];

                Vector3 rotatedVector;
                Vector3.Transform(ref vertex, ref def.ModelToWorld, out rotatedVector);

                // Translate
                Vector3 finalVector;
                Vector3.Add(ref rotatedVector, ref def.Position, out finalVector);

                m2.BoundingVertices[i] = finalVector;
                //currentM2.Vertices.Add(new VertexPositionNormalColored(finalVector, Color.Red, Vector3.Up));
            }
        }
        private static void TransformM2(ExtractedM2 m2, ExtractedWMOM2Definition m2Def)
        {
            for (var i = 0; i < m2.BoundingVertices.Count; i++)
            {
                var vec = m2.BoundingVertices[i];
                Vector3 rotatedVec;
                Vector3.Transform(ref vec, ref m2Def.ModeltoWMO, out rotatedVec);

                Vector3 finalVec;
                Vector3.Add(ref rotatedVec, ref m2Def.Position, out finalVec);

                m2.BoundingVertices[i] = finalVec;
            }
        }