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++; } } }
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++; } } }