private bool ShouldMeshMerge(MeshSphereLocalLod mesh, Camera camera) { if (mesh.Level <= CoarsestLevel || mesh.Ring % 2 != 0 || mesh.Slice % 2 != 0) { return(false); } return((mesh.Center - camera.Position).LengthFast > SwitchingMultiplier / Math.Pow(2, mesh.Level - 1.5f)); }
private bool ShouldMeshSubdivide(MeshSphereLocalLod mesh, Camera camera) { if (mesh.Level >= FinestLevel) { return(false); } return((mesh.Center - camera.Position).LengthFast < SwitchingMultiplier / Math.Pow(2, mesh.Level)); }
private void Merge(MeshSphereLocalLod oldMesh) { var oldLevel = oldMesh.Level; var slice = oldMesh.Slice; var ring = oldMesh.Ring; var oldSlicePos = slice / 2; var oldRingPos = ring / 2; RemoveLodComponent(oldLevel, slice, ring); RemoveLodComponent(oldLevel, slice, ring + 1); RemoveLodComponent(oldLevel, slice + 1, ring); RemoveLodComponent(oldLevel, slice + 1, ring + 1); AddLodComponent(oldLevel - 1, oldSlicePos, oldRingPos); }
private void Split(MeshSphereLocalLod oldMesh) { var oldLevel = oldMesh.Level; var slice = oldMesh.Slice; var ring = oldMesh.Ring; var oldSlicePos = slice * 2; var oldRingPos = ring * 2; RemoveLodComponent(oldLevel, slice, ring); AddLodComponent(oldLevel + 1, oldSlicePos, oldRingPos); AddLodComponent(oldLevel + 1, oldSlicePos, oldRingPos + 1); AddLodComponent(oldLevel + 1, oldSlicePos + 1, oldRingPos); AddLodComponent(oldLevel + 1, oldSlicePos + 1, oldRingPos + 1); }
public LodOperation(MeshSphereLocalLod mesh, LodAction action) { Mesh = mesh; Action = action; }