Example #1
0
        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;
        }
Example #2
0
        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);
        }
Example #3
0
 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;
 }
Example #4
0
 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;
 }