Example #1
0
        public Octree(Primatives.TriangleMesh Mesh, int MaxLevels)
        {
            Vector3[] maxmin = maxMin(Mesh);
            Vector3 max = maxmin[0];
            Vector3 min = maxmin[1];

            this.mesh = Mesh;

            this.maxDivisions = MaxLevels;

            center = (maxmin[0] + maxmin[1]) / 2;
            size = (maxmin[0] - maxmin[1]);
        }
Example #2
0
        public Octree(Primatives.TriangleMesh Mesh, int MaxLevels)
        {
            Vector3[] maxmin = maxMin(Mesh);
            Vector3   max    = maxmin[0];
            Vector3   min    = maxmin[1];

            this.mesh = Mesh;

            this.maxDivisions = MaxLevels;

            center = (maxmin[0] + maxmin[1]) / 2;
            size   = (maxmin[0] - maxmin[1]);
        }
Example #3
0
        Vector3[] maxMin(Primatives.TriangleMesh Mesh)
        {
            Vector3 max = Vector3.Zero;
            Vector3 min = Vector3.Zero;

            Vector3[] maxmin = new Vector3[2];

            foreach (Primatives.Triangle Triangle in Mesh.Triangles)
            {
                for (int i = 0; i < 3; i++)
                {
                    if (Triangle.Vertices[i].X > max.X)
                    {
                        max.X = Triangle.Vertices[i].X;
                    }
                    if (Triangle.Vertices[i].Y > max.Y)
                    {
                        max.Y = Triangle.Vertices[i].Y;
                    }
                    if (Triangle.Vertices[i].Z > max.Z)
                    {
                        max.Z = Triangle.Vertices[i].Z;
                    }

                    if (Triangle.Vertices[i].X < min.X)
                    {
                        min.X = Triangle.Vertices[i].X;
                    }
                    if (Triangle.Vertices[i].Y < min.Y)
                    {
                        min.Y = Triangle.Vertices[i].Y;
                    }
                    if (Triangle.Vertices[i].Z < min.Z)
                    {
                        min.Z = Triangle.Vertices[i].Z;
                    }
                }
            }

            maxmin[0] = max;
            maxmin[1] = min;

            return(maxmin);
        }
Example #4
0
        public World(Model model)
        {
            int a = 1;

            for (int i = 0; i < numDivisions + 1; i++)
            {
                int numOcts = a;
                OctreeReferences[i] = new List <int> [numOcts];
                a *= 8;
            }

            Dictionary <string, object> tagData = (Dictionary <string, object>)model.Tag;

            Vector3[]             vertices  = (Vector3[])tagData["Vertices"];
            Primatives.Triangle[] triangles = new Primatives.Triangle[vertices.Length / 3];
            int n = 0;

            for (int i = 0; i < vertices.Length;)
            {
                Vector3 v1 = vertices[i++];
                Vector3 v2 = vertices[i++];
                Vector3 v3 = vertices[i++];

                triangles[n++] = new Primatives.Triangle(v1, v2, v3);
            }

            octree    = new Octree(new Primatives.TriangleMesh(triangles), numDivisions);
            this.mesh = octree.OctTaggedMesh;

            for (int i = 0; i < mesh.Triangles.Length; i++)
            {
                int octlet = mesh.Triangles[i].OctTag[0];
                int level  = mesh.Triangles[i].OctTag[1];

                if (OctreeReferences[level][octlet] == null)
                {
                    OctreeReferences[level][octlet] = new List <int>();
                }
                OctreeReferences[level][octlet].Add(i);
            }
        }
Example #5
0
        public World(Model model)
        {
            int a = 1;
            for (int i = 0; i < numDivisions + 1; i++)
            {
                int numOcts = a;
                OctreeReferences[i] = new List<int>[numOcts];
                a *= 8;
            }

            Dictionary<string, object> tagData = (Dictionary<string, object>)model.Tag;
            Vector3[] vertices = (Vector3[])tagData["Vertices"];
            Primatives.Triangle[] triangles = new Primatives.Triangle[vertices.Length / 3];
            int n = 0;
            for (int i = 0; i < vertices.Length; )
            {
                Vector3 v1 = vertices[i++];
                Vector3 v2 = vertices[i++];
                Vector3 v3 = vertices[i++];

                triangles[n++] = new Primatives.Triangle(v1, v2, v3);
            }

            octree = new Octree(new Primatives.TriangleMesh(triangles), numDivisions);
            this.mesh = octree.OctTaggedMesh;

            for (int i = 0; i < mesh.Triangles.Length; i++)
            {
                int octlet = mesh.Triangles[i].OctTag[0];
                int level = mesh.Triangles[i].OctTag[1];

                if (OctreeReferences[level][octlet] == null)
                {
                    OctreeReferences[level][octlet] = new List<int>();
                }
                OctreeReferences[level][octlet].Add(i);
            }
        }