|
@@ -38,7 +38,7 @@ class LOD extends Object3D {
|
|
|
|
|
|
const level = levels[ i ];
|
|
|
|
|
|
- this.addLevel( level.object.clone(), level.distance );
|
|
|
+ this.addLevel( level.object.clone(), level.distance, level.hysteresis );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -48,7 +48,7 @@ class LOD extends Object3D {
|
|
|
|
|
|
}
|
|
|
|
|
|
- addLevel( object, distance = 0 ) {
|
|
|
+ addLevel( object, distance = 0, hysteresis = 0 ) {
|
|
|
|
|
|
distance = Math.abs( distance );
|
|
|
|
|
@@ -66,7 +66,7 @@ class LOD extends Object3D {
|
|
|
|
|
|
}
|
|
|
|
|
|
- levels.splice( l, 0, { distance: distance, object: object } );
|
|
|
+ levels.splice( l, 0, { distance: distance, hysteresis: hysteresis, object: object } );
|
|
|
|
|
|
this.add( object );
|
|
|
|
|
@@ -80,6 +80,8 @@ class LOD extends Object3D {
|
|
|
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
getObjectForDistance( distance ) {
|
|
|
|
|
|
const levels = this.levels;
|
|
@@ -90,7 +92,15 @@ class LOD extends Object3D {
|
|
|
|
|
|
for ( i = 1, l = levels.length; i < l; i ++ ) {
|
|
|
|
|
|
- if ( distance < levels[ i ].distance ) {
|
|
|
+ let levelDistance = levels[ i ].distance;
|
|
|
+
|
|
|
+ if ( levels[ i ].object.visible ) {
|
|
|
+
|
|
|
+ levelDistance -= levelDistance * levels[ i ].hysteresis;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( distance < levelDistance ) {
|
|
|
|
|
|
break;
|
|
|
|
|
@@ -139,7 +149,15 @@ class LOD extends Object3D {
|
|
|
|
|
|
for ( i = 1, l = levels.length; i < l; i ++ ) {
|
|
|
|
|
|
- if ( distance >= levels[ i ].distance ) {
|
|
|
+ let levelDistance = levels[ i ].distance;
|
|
|
+
|
|
|
+ if ( levels[ i ].object.visible ) {
|
|
|
+
|
|
|
+ levelDistance -= levelDistance * levels[ i ].hysteresis;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( distance >= levelDistance ) {
|
|
|
|
|
|
levels[ i - 1 ].object.visible = false;
|
|
|
levels[ i ].object.visible = true;
|
|
@@ -180,7 +198,8 @@ class LOD extends Object3D {
|
|
|
|
|
|
data.object.levels.push( {
|
|
|
object: level.object.uuid,
|
|
|
- distance: level.distance
|
|
|
+ distance: level.distance,
|
|
|
+ hysteresis: level.hysteresis
|
|
|
} );
|
|
|
|
|
|
}
|