/// <summary> /// Patches are defined in a local space. This determines the planet-space parameters of a patch /// </summary> private void SetPatchPlanetParameters( ITerrainPatch patch ) { float radius = Planet.Model.Radius.ToRenderUnits; Point3 edge = patch.LocalOrigin + ( patch.LocalUAxis / 2 ); Point3 centre = edge + ( patch.LocalVAxis / 2 ); Point3 plEdge = ( edge.ToVector3( ).MakeNormal( ) * radius ).ToPoint3( ); Point3 plCentre = ( centre.ToVector3( ).MakeNormal( ) * radius ).ToPoint3( ); patch.SetPlanetParameters( plCentre, plCentre.DistanceTo( plEdge ) ); }
/// <summary> /// Generates vertices for a terrain patch /// </summary> /// <param name="patch">Terrain patch</param> /// <param name="res">Terrain patch resolution</param> /// <param name="firstVertex">Pointer to terrain vertices</param> /// <param name="error">Terrain patch error output here</param> public unsafe void GenerateTerrainPatchVertices( ITerrainPatch patch, int res, TerrainVertex* firstVertex, out float error ) { m_Gen.GenerateVertices( patch.LocalOrigin, patch.LocalUStep, patch.LocalVStep, res, res, patch.Uv, patch.UvResolution, firstVertex, out error ); }
/// <summary> /// Generates vertices for a patch. Calculates maximum error between this patch and next higher detail patch /// </summary> /// <param name="patch">Patch</param> /// <param name="res">Patch resolution</param> /// <param name="firstVertex">Patch vertices</param> /// <param name="error">Maximum error value between this patch and higher level patch</param> public unsafe void GenerateTerrainPatchVertices( ITerrainPatch patch, int res, TerrainPatchVertex* firstVertex, out float error ) { SetPatchPlanetParameters( patch ); SafeTerrainGenerator.GenerateVertices( patch.LocalOrigin, patch.LocalUStep, patch.LocalVStep, res, res, patch.Uv, patch.UvResolution, firstVertex, out error ); }