Esempio n. 1
0
        public SpatialGrid(GraphicsClass InGraphics, KynogonRuntimeMesh mesh)
        {
            OwnGraphicsClass = InGraphics;

            bIsReady = true;
            var min = new Vector3(mesh.BoundMin, float.MinValue);
            var max = new Vector3(mesh.BoundMax, float.MaxValue);

            gridBounds = new BoundingBox(min, max);

            width    = mesh.CellSizeY;
            height   = mesh.CellSizeX;
            origin   = new Vector3(gridBounds.Minimum.X, gridBounds.Minimum.Y, 0.0f);
            cellSize = new Vector2(gridBounds.GetWidth() / width, gridBounds.GetHeight() / height);
            cells    = new SpatialCell[width * height];

            Vector3 TempMin = gridBounds.Minimum;
            Vector3 TempMax = gridBounds.Maximum;

            var index = 0;

            for (int i = 0; i < width; i++)
            {
                for (int x = 0; x < height; x++)
                {
                    KynogonRuntimeMesh.Cell cell = mesh.Cells[index];

                    foreach (var set in cell.Sets)
                    {
                        if (gridBounds.Minimum.Z < set.X)
                        {
                            TempMin.Z = set.X;
                        }
                        if (gridBounds.Maximum.Z > set.Y)
                        {
                            TempMax.Z = set.Y;
                        }
                    }

                    // Construct cell extents
                    Vector3     Minimum     = new Vector3(origin.X + cellSize.X * x, origin.Y + cellSize.Y * i, 0.0f);
                    Vector3     Maximum     = new Vector3(origin.X + cellSize.X * (x + 1), origin.Y + cellSize.Y * (i + 1), 0.0f);
                    BoundingBox CellExtents = new BoundingBox(Minimum, Maximum);

                    // Construct Init params
                    SpatialCell_ObjDataParams InitParams = new SpatialCell_ObjDataParams();
                    InitParams.OwnGraphics = OwnGraphicsClass;
                    InitParams.CellExtents = CellExtents;
                    InitParams.CellInfo    = cell;

                    // Construct ObjData cell
                    SpatialCell_ObjData ObjDataCell = new SpatialCell_ObjData(InitParams);
                    ObjDataCell.PreInitialise();
                    cells[index] = ObjDataCell;

                    index++;
                }
            }
        }
Esempio n. 2
0
        public SpatialGrid(KynogonRuntimeMesh mesh)
        {
            bIsReady = true;
            var min = new Vector3(mesh.BoundMin, float.MinValue);
            var max = new Vector3(mesh.BoundMax, float.MaxValue);

            gridBounds = new BoundingBox(min, max);

            width    = mesh.CellSizeY;
            height   = mesh.CellSizeX;
            origin   = new Vector3(gridBounds.Minimum.X, gridBounds.Minimum.Y, 0.0f);
            cellSize = new Vector2(gridBounds.Width / width, gridBounds.Height / height);
            cells    = new SpatialCell[width * height];

            var index = 0;

            for (int i = 0; i < width; i++)
            {
                for (int x = 0; x < height; x++)
                {
                    KynogonRuntimeMesh.Cell cell = mesh.Cells[index];

                    foreach (var set in cell.Sets)
                    {
                        if (gridBounds.Minimum.Z < set.X)
                        {
                            gridBounds.Minimum.Z = set.X;
                        }
                        if (gridBounds.Maximum.Z > set.Y)
                        {
                            gridBounds.Maximum.Z = set.Y;
                        }
                    }

                    var extents = new BoundingBox();
                    extents.Minimum = new Vector3(origin.X + cellSize.X * x, origin.Y + cellSize.Y * i, 0.0f);
                    extents.Maximum = new Vector3(origin.X + cellSize.X * (x + 1), origin.Y + cellSize.Y * (i + 1), 0.0f);
                    cells[index]    = new SpatialCell(cell, extents);

                    index++;
                }
            }
        }