Advertisement
Guest User

Untitled

a guest
Dec 5th, 2014
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.71 KB | None | 0 0
  1.  
  2.         static TiledNavMesh BuildNavMesh(IObjModel level)
  3.         {
  4.             if (level == null) throw new ArgumentNullException("level");
  5.             //var settings = new GenSettings();
  6.  
  7.             //var parameters = NavMeshGenerationSettings.Default; ;
  8.             //parameters.AgentHeight = settings.MaxHeight;
  9.             //parameters.AgentWidth = 1; //not really used, but set a default value anyway
  10.             //parameters.MaxClimb = settings.MaxClimb;
  11.  
  12.             //return SharpNav.NavMesh.Generate(TriangleEnumerable.FromTriangle(level.GetTriangles(), 0, level.GetTriangles().Length), parameters);
  13.  
  14.             var settings = new GenSettings();
  15.             int voxMaxHeight = (int)(settings.MaxHeight / settings.CellHeight);
  16.             int voxMaxClimb = (int)(settings.MaxClimb / settings.CellHeight);
  17.             int voxErodeRadius = (int)(settings.ErodeRadius / settings.CellSize);
  18.  
  19.             BBox3 bounds = level.GetBounds();
  20.  
  21.             var heightfield = new Heightfield(bounds, settings.CellSize, settings.CellHeight);
  22.  
  23.             /*AreaFlags[] areas = AreaFlagsGenerator.From(level.GetTriangles(), AreaFlags.Walkable)
  24.                 .MarkAboveHeight(5f, AreaFlags.Null)
  25.                 .MarkAboveSlope(0.95f, AreaFlags.Null)
  26.                 .ToArray();
  27.             heightfield.RasterizeTrianglesWithAreas(level.GetTriangles(), areas);*/
  28.             heightfield.RasterizeTriangles(level.GetTriangles());
  29.  
  30.  
  31.             heightfield.FilterLedgeSpans(voxMaxHeight, voxMaxClimb);
  32.             heightfield.FilterLowHangingWalkableObstacles(voxMaxClimb);
  33.             heightfield.FilterWalkableLowHeightSpans(voxMaxHeight);
  34.  
  35.             var compactHeightfield = new CompactHeightfield(heightfield, voxMaxHeight, voxMaxClimb);
  36.  
  37.             compactHeightfield.Erode(voxErodeRadius);
  38.  
  39.  
  40.             compactHeightfield.BuildDistanceField();
  41.  
  42.             compactHeightfield.BuildRegions(2, settings.MinRegionSize, settings.MergedRegionSize);
  43.  
  44.             var contourSet = new ContourSet(compactHeightfield, settings.MaxEdgeError, settings.MaxEdgeLength, 0);
  45.  
  46.             var polyMesh = new PolyMesh(contourSet, settings.VertsPerPoly);
  47.  
  48.             var polyMeshDetail = new PolyMeshDetail(polyMesh, compactHeightfield, settings.SampleDistance, settings.MaxSmapleError);
  49.  
  50.             var parameters = NavMeshGenerationSettings.Default;
  51.             parameters.AgentHeight = settings.MaxHeight;
  52.             parameters.AgentWidth = 1; //not really used, but set a default value anyway
  53.             parameters.MaxClimb = settings.MaxClimb;
  54.  
  55.             var buildData = new NavMeshBuilder(polyMesh, polyMeshDetail, new OffMeshConnection[0], parameters);
  56.  
  57.             return new TiledNavMesh(buildData);
  58.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement