Exemple #1
0
        public EdgeIndices16(FastBinaryReader reader)
        {
            this.westVertexCount = reader.ReadUInt32();
            this.westIndices     = new ushort[westVertexCount];

            for (int i = 0; i < westVertexCount; i++)
            {
                westIndices[i] = reader.ReadUInt16();
            }

            this.southVertexCount = reader.ReadUInt32();
            this.southIndices     = new ushort[southVertexCount];

            for (int i = 0; i < southVertexCount; i++)
            {
                southIndices[i] = reader.ReadUInt16();
            }

            this.eastVertexCount = reader.ReadUInt32();
            this.eastIndices     = new ushort[eastVertexCount];

            for (int i = 0; i < eastVertexCount; i++)
            {
                eastIndices[i] = reader.ReadUInt16();
            }

            this.northVertexCount = reader.ReadUInt32();
            this.northIndices     = new ushort[northVertexCount];

            for (int i = 0; i < northVertexCount; i++)
            {
                northIndices[i] = reader.ReadUInt16();
            }
        }
        public static void Parse(Stream tileStream)
        {
            using (var zStream = new GZipStream(tileStream, CompressionMode.Decompress))
            {
                using (var reader = new FastBinaryReader(zStream))
                {
                    // read header
                    var header = new QuantizedMeshHeader(reader);
                    var vertexData = new VertexData(reader);
                    var indexData = new IndexData16(reader);
                    var edgeIndexData = new EdgeIndices16(reader);

                    NormalExtensionData normalData;
                    while (reader.HasMore())
                    {
                        var extensionHeader = new ExtensionHeader(reader);

                        if (extensionHeader.extensionId == 1)
                        {
                            // oct-encoded per vertex normals
                            normalData = new NormalExtensionData(reader, vertexData.vertexCount);
                        }
                    }

                    int a = 10;
                }
            }
        }
        public static void Parse(Stream tileStream)
        {
            using (var zStream = new GZipStream(tileStream, CompressionMode.Decompress))
            {
                using (var reader = new FastBinaryReader(zStream))
                {
                    // read header
                    var header        = new QuantizedMeshHeader(reader);
                    var vertexData    = new VertexData(reader);
                    var indexData     = new IndexData16(reader);
                    var edgeIndexData = new EdgeIndices16(reader);

                    NormalExtensionData normalData;
                    while (reader.HasMore())
                    {
                        var extensionHeader = new ExtensionHeader(reader);

                        if (extensionHeader.extensionId == 1)
                        {
                            // oct-encoded per vertex normals
                            normalData = new NormalExtensionData(reader, vertexData.vertexCount);
                        }
                    }

                    int a = 10;
                }
            }
        }
Exemple #4
0
        public EdgeIndices16(FastBinaryReader reader)
        {
            this.westVertexCount = reader.ReadUInt32();
            this.westIndices = new ushort[westVertexCount];

            for (int i = 0; i < westVertexCount; i++)
                westIndices[i] = reader.ReadUInt16();

            this.southVertexCount = reader.ReadUInt32();
            this.southIndices = new ushort[southVertexCount];

            for (int i = 0; i < southVertexCount; i++)
                southIndices[i] = reader.ReadUInt16();

            this.eastVertexCount = reader.ReadUInt32();
            this.eastIndices = new ushort[eastVertexCount];

            for (int i = 0; i < eastVertexCount; i++)
                eastIndices[i] = reader.ReadUInt16();

            this.northVertexCount = reader.ReadUInt32();
            this.northIndices = new ushort[northVertexCount];

            for (int i = 0; i < northVertexCount; i++)
                northIndices[i] = reader.ReadUInt16();
        }
        public NormalExtensionData(FastBinaryReader reader, uint vertCount)
        {
            this.vertexCount = vertCount;
            this.xy = new byte[vertexCount * 2];

            for (int i = 0; i < vertexCount*2; i++)
                xy[i] = reader.ReadByte();
        }
Exemple #6
0
        public VertexData(FastBinaryReader reader)
        {
            vertexCount = reader.ReadUInt32();
            u           = new ushort[vertexCount];
            v           = new ushort[vertexCount];
            height      = new ushort[vertexCount];

            if (vertexCount > 64 * 1024)
            {
                throw new NotSupportedException("32 bit indices not supported yet");
            }

            //fixed (ushort* uptr = u)
            //{
            //    SharpDX.Utilities.CopyMemory(new IntPtr(uptr), new IntPtr(reader.FixedPtr), (int)vertexCount * sizeof(ushort));
            //    reader.AdvanceBytes(vertexCount * sizeof(ushort));
            //}
            for (int i = 0; i < vertexCount; i++)
            {
                u[i] = reader.ReadUInt16();
            }

            //fixed (ushort* vptr = v)
            //{
            //    SharpDX.Utilities.CopyMemory(new IntPtr(vptr), new IntPtr(reader.FixedPtr), (int)vertexCount * sizeof(ushort));
            //    reader.AdvanceBytes(vertexCount * sizeof(ushort));
            //}
            for (int i = 0; i < vertexCount; i++)
            {
                v[i] = reader.ReadUInt16();
            }

            //fixed (ushort* hptr = height)
            //{
            //    SharpDX.Utilities.CopyMemory(new IntPtr(hptr), new IntPtr(reader.FixedPtr), (int)vertexCount * sizeof(ushort));
            //    reader.AdvanceBytes(vertexCount * sizeof(ushort));
            //}
            for (int i = 0; i < vertexCount; i++)
            {
                height[i] = reader.ReadUInt16();
            }

            ushort _u      = 0;
            ushort _v      = 0;
            ushort _height = 0;

            for (int i = 0; i < vertexCount; i++)
            {
                _u      += zigZagDecode(u[i]);
                _v      += zigZagDecode(v[i]);
                _height += zigZagDecode(height[i]);

                u[i]      = _u;
                v[i]      = _v;
                height[i] = _height;
            }
        }
        public NormalExtensionData(FastBinaryReader reader, uint vertCount)
        {
            this.vertexCount = vertCount;
            this.xy          = new byte[vertexCount * 2];

            for (int i = 0; i < vertexCount * 2; i++)
            {
                xy[i] = reader.ReadByte();
            }
        }
Exemple #8
0
        public VertexData(FastBinaryReader reader)
        {
            vertexCount = reader.ReadUInt32();
            u = new ushort[vertexCount];
            v = new ushort[vertexCount];
            height = new ushort[vertexCount];

            if (vertexCount > 64 * 1024)
                throw new NotSupportedException("32 bit indices not supported yet");

            //fixed (ushort* uptr = u)
            //{
            //    SharpDX.Utilities.CopyMemory(new IntPtr(uptr), new IntPtr(reader.FixedPtr), (int)vertexCount * sizeof(ushort));
            //    reader.AdvanceBytes(vertexCount * sizeof(ushort));
            //}
            for (int i = 0; i < vertexCount; i++)
                u[i] = reader.ReadUInt16();

            //fixed (ushort* vptr = v)
            //{
            //    SharpDX.Utilities.CopyMemory(new IntPtr(vptr), new IntPtr(reader.FixedPtr), (int)vertexCount * sizeof(ushort));
            //    reader.AdvanceBytes(vertexCount * sizeof(ushort));
            //}
            for (int i = 0; i < vertexCount; i++)
                v[i] = reader.ReadUInt16();

            //fixed (ushort* hptr = height)
            //{
            //    SharpDX.Utilities.CopyMemory(new IntPtr(hptr), new IntPtr(reader.FixedPtr), (int)vertexCount * sizeof(ushort));
            //    reader.AdvanceBytes(vertexCount * sizeof(ushort));
            //}
            for (int i = 0; i < vertexCount; i++)
                height[i] = reader.ReadUInt16();

            ushort _u = 0;
            ushort _v = 0;
            ushort _height = 0;

            for (int i = 0; i < vertexCount; i++)
            {
                _u += zigZagDecode(u[i]);
                _v += zigZagDecode(v[i]);
                _height += zigZagDecode(height[i]);

                u[i] = _u;
                v[i] = _v;
                height[i] = _height;
            }
        }
Exemple #9
0
        public IndexData16(FastBinaryReader reader)
        {
            this.triangleCount = reader.ReadUInt32();
            indices = new ushort[triangleCount * 3];

            ushort highest = 0;
            for (int i = 0; i < indices.Length; i++)
            {
                ushort code = reader.ReadUInt16();
                indices[i] = (ushort)(highest - code);

                if (code == 0)
                    highest++;
            }
        }
        public QuantizedMeshHeader(FastBinaryReader reader)
        {
            CenterX = reader.ReadDouble();
            CenterY = reader.ReadDouble();
            CenterZ = reader.ReadDouble();

            MinimumHeight = reader.ReadSingle();
            MaximumHeight = reader.ReadSingle();

            BoundingSphereCenterX = reader.ReadDouble();
            BoundingSphereCenterY = reader.ReadDouble();
            BoundingSphereCenterZ = reader.ReadDouble();
            BoundingSphereRadius = reader.ReadDouble();

            HorizonOcclusionPointX = reader.ReadDouble();
            HorizonOcclusionPointY = reader.ReadDouble();
            HorizonOcclusionPointZ = reader.ReadDouble();
        }
Exemple #11
0
        public IndexData16(FastBinaryReader reader)
        {
            this.triangleCount = reader.ReadUInt32();
            indices            = new ushort[triangleCount * 3];

            ushort highest = 0;

            for (int i = 0; i < indices.Length; i++)
            {
                ushort code = reader.ReadUInt16();
                indices[i] = (ushort)(highest - code);

                if (code == 0)
                {
                    highest++;
                }
            }
        }
Exemple #12
0
        public QuantizedMeshHeader(FastBinaryReader reader)
        {
            CenterX = reader.ReadDouble();
            CenterY = reader.ReadDouble();
            CenterZ = reader.ReadDouble();

            MinimumHeight = reader.ReadSingle();
            MaximumHeight = reader.ReadSingle();

            BoundingSphereCenterX = reader.ReadDouble();
            BoundingSphereCenterY = reader.ReadDouble();
            BoundingSphereCenterZ = reader.ReadDouble();
            BoundingSphereRadius  = reader.ReadDouble();

            HorizonOcclusionPointX = reader.ReadDouble();
            HorizonOcclusionPointY = reader.ReadDouble();
            HorizonOcclusionPointZ = reader.ReadDouble();
        }
Exemple #13
0
 public ExtensionHeader(FastBinaryReader reader)
 {
     this.extensionId     = reader.ReadByte();
     this.extensionLength = reader.ReadUInt32();
 }
Exemple #14
0
 public ExtensionHeader(FastBinaryReader reader)
 {
     this.extensionId = reader.ReadByte();
     this.extensionLength = reader.ReadUInt32();
 }