public void ReadkDOPTree(byte[] memory) { UnknownList l = new UnknownList(); l.size = BitConverter.ToInt32(memory, readerpos); l.count = BitConverter.ToInt32(memory, readerpos + 4); readerpos += 8; int len = l.size * l.count; l.data = new byte[len]; for (int i = 0; i < len; i++) { l.data[i] = memory[readerpos + i]; } kdNodes = new List <kDOPNode>(); for (int i = 0; i < l.count; i++) { kDOPNode nd = new kDOPNode(); nd.min = new Vector3(memory[readerpos] / 256f, memory[readerpos + 1] / 256f, memory[readerpos + 2] / 256f); nd.max = new Vector3(memory[readerpos + 3] / 256f, memory[readerpos + 4] / 256f, memory[readerpos + 5] / 256f); kdNodes.Add(nd); for (int j = 0; j < l.size; j++) { readerpos++; } } Mesh.kDOPTree = l; }
public static void Serialize(this SerializingContainer2 sc, ref kDOPNode kDopNode) { if (sc.IsLoading) { kDopNode = new kDOPNode(); } sc.Serialize(ref kDopNode.BoundingVolume); sc.Serialize(ref kDopNode.bIsLeaf); //depending on bIsLeaf, next two are either LeftNode and RightNode, or NumTriangles and StartIndex. //But since it's a union, they share space in memory, so it doesn't matter for serialization purposes sc.Serialize(ref kDopNode.u.LeftNode); sc.Serialize(ref kDopNode.u.RightNode); }
public void ReadkDOPTree(byte[] memory) { TreeNode res = new TreeNode("kDOP-tree pos: 0x" + readerpos.ToString("X4")); UnknownList l = new UnknownList(); l.size = BitConverter.ToInt32(memory, readerpos); l.count = BitConverter.ToInt32(memory, readerpos + 4); readerpos += 8; int len = l.size * l.count; l.data = new byte[len]; for (int i = 0; i < len; i++) l.data[i] = memory[readerpos + i]; res.Nodes.Add(new TreeNode("Size : " + l.size.ToString())); res.Nodes.Add(new TreeNode("Count : " + l.count.ToString())); TreeNode t = new TreeNode("Data"); kdNodes = new List<kDOPNode>(); for (int i = 0; i < l.count; i++) { kDOPNode nd = new kDOPNode(); nd.min = new Vector3(memory[readerpos] / 256f, memory[readerpos + 1] / 256f, memory[readerpos + 2] / 256f); nd.max = new Vector3(memory[readerpos + 3] / 256f, memory[readerpos + 4] / 256f, memory[readerpos + 5] / 256f); kdNodes.Add(nd); string s = ""; for (int j = 0; j < l.size; j++) { s += (memory[readerpos] / 256f).ToString() + " "; readerpos++; } t.Nodes.Add(new TreeNode("#" + i.ToString("D4") + " : " + s)); } ReadkdNodes(Meshplorer.Preview3D.Cubes[0], memory); res.Nodes.Add(t); l.t = res; Mesh.kDOPTree = l; }
public void ReadkDOPTree(byte[] memory) { UnknownList l = new UnknownList(); l.size = BitConverter.ToInt32(memory, readerpos); l.count = BitConverter.ToInt32(memory, readerpos + 4); readerpos += 8; int len = l.size * l.count; l.data = new byte[len]; for (int i = 0; i < len; i++) l.data[i] = memory[readerpos + i]; kdNodes = new List<kDOPNode>(); for (int i = 0; i < l.count; i++) { kDOPNode nd = new kDOPNode(); nd.min = new Vector3(memory[readerpos] / 256f, memory[readerpos + 1] / 256f, memory[readerpos + 2] / 256f); nd.max = new Vector3(memory[readerpos + 3] / 256f, memory[readerpos + 4] / 256f, memory[readerpos + 5] / 256f); kdNodes.Add(nd); for (int j = 0; j < l.size; j++) { readerpos++; } } Mesh.kDOPTree = l; }