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 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(); }
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(); } }
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 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(); }
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 ExtensionHeader(FastBinaryReader reader) { this.extensionId = reader.ReadByte(); this.extensionLength = reader.ReadUInt32(); }