Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static TiledNavMesh BuildNavMesh(IObjModel level)
- {
- if (level == null) throw new ArgumentNullException("level");
- //var settings = new GenSettings();
- //var parameters = NavMeshGenerationSettings.Default; ;
- //parameters.AgentHeight = settings.MaxHeight;
- //parameters.AgentWidth = 1; //not really used, but set a default value anyway
- //parameters.MaxClimb = settings.MaxClimb;
- //return SharpNav.NavMesh.Generate(TriangleEnumerable.FromTriangle(level.GetTriangles(), 0, level.GetTriangles().Length), parameters);
- var settings = new GenSettings();
- int voxMaxHeight = (int)(settings.MaxHeight / settings.CellHeight);
- int voxMaxClimb = (int)(settings.MaxClimb / settings.CellHeight);
- int voxErodeRadius = (int)(settings.ErodeRadius / settings.CellSize);
- BBox3 bounds = level.GetBounds();
- var heightfield = new Heightfield(bounds, settings.CellSize, settings.CellHeight);
- /*AreaFlags[] areas = AreaFlagsGenerator.From(level.GetTriangles(), AreaFlags.Walkable)
- .MarkAboveHeight(5f, AreaFlags.Null)
- .MarkAboveSlope(0.95f, AreaFlags.Null)
- .ToArray();
- heightfield.RasterizeTrianglesWithAreas(level.GetTriangles(), areas);*/
- heightfield.RasterizeTriangles(level.GetTriangles());
- heightfield.FilterLedgeSpans(voxMaxHeight, voxMaxClimb);
- heightfield.FilterLowHangingWalkableObstacles(voxMaxClimb);
- heightfield.FilterWalkableLowHeightSpans(voxMaxHeight);
- var compactHeightfield = new CompactHeightfield(heightfield, voxMaxHeight, voxMaxClimb);
- compactHeightfield.Erode(voxErodeRadius);
- compactHeightfield.BuildDistanceField();
- compactHeightfield.BuildRegions(2, settings.MinRegionSize, settings.MergedRegionSize);
- var contourSet = new ContourSet(compactHeightfield, settings.MaxEdgeError, settings.MaxEdgeLength, 0);
- var polyMesh = new PolyMesh(contourSet, settings.VertsPerPoly);
- var polyMeshDetail = new PolyMeshDetail(polyMesh, compactHeightfield, settings.SampleDistance, settings.MaxSmapleError);
- var parameters = NavMeshGenerationSettings.Default;
- parameters.AgentHeight = settings.MaxHeight;
- parameters.AgentWidth = 1; //not really used, but set a default value anyway
- parameters.MaxClimb = settings.MaxClimb;
- var buildData = new NavMeshBuilder(polyMesh, polyMeshDetail, new OffMeshConnection[0], parameters);
- return new TiledNavMesh(buildData);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement