示例#1
0
 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));
 }
示例#2
0
 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));
 }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
 public LodOperation(MeshSphereLocalLod mesh, LodAction action)
 {
     Mesh   = mesh;
     Action = action;
 }