浏览代码

Updated builds.

Mugen87 2 年之前
父节点
当前提交
15f983d0e2
共有 4 个文件被更改,包括 109 次插入40 次删除
  1. 31 13
      build/three.cjs
  2. 31 13
      build/three.js
  3. 0 0
      build/three.min.js
  4. 47 14
      build/three.module.js

+ 31 - 13
build/three.cjs

@@ -7835,32 +7835,32 @@ class CubeCamera extends Object3D {
 		const cameraPX = new PerspectiveCamera(fov, aspect, near, far);
 		const cameraPX = new PerspectiveCamera(fov, aspect, near, far);
 		cameraPX.layers = this.layers;
 		cameraPX.layers = this.layers;
 		cameraPX.up.set(0, -1, 0);
 		cameraPX.up.set(0, -1, 0);
-		cameraPX.lookAt(new Vector3(1, 0, 0));
+		cameraPX.lookAt(1, 0, 0);
 		this.add(cameraPX);
 		this.add(cameraPX);
 		const cameraNX = new PerspectiveCamera(fov, aspect, near, far);
 		const cameraNX = new PerspectiveCamera(fov, aspect, near, far);
 		cameraNX.layers = this.layers;
 		cameraNX.layers = this.layers;
 		cameraNX.up.set(0, -1, 0);
 		cameraNX.up.set(0, -1, 0);
-		cameraNX.lookAt(new Vector3(-1, 0, 0));
+		cameraNX.lookAt(-1, 0, 0);
 		this.add(cameraNX);
 		this.add(cameraNX);
 		const cameraPY = new PerspectiveCamera(fov, aspect, near, far);
 		const cameraPY = new PerspectiveCamera(fov, aspect, near, far);
 		cameraPY.layers = this.layers;
 		cameraPY.layers = this.layers;
 		cameraPY.up.set(0, 0, 1);
 		cameraPY.up.set(0, 0, 1);
-		cameraPY.lookAt(new Vector3(0, 1, 0));
+		cameraPY.lookAt(0, 1, 0);
 		this.add(cameraPY);
 		this.add(cameraPY);
 		const cameraNY = new PerspectiveCamera(fov, aspect, near, far);
 		const cameraNY = new PerspectiveCamera(fov, aspect, near, far);
 		cameraNY.layers = this.layers;
 		cameraNY.layers = this.layers;
 		cameraNY.up.set(0, 0, -1);
 		cameraNY.up.set(0, 0, -1);
-		cameraNY.lookAt(new Vector3(0, -1, 0));
+		cameraNY.lookAt(0, -1, 0);
 		this.add(cameraNY);
 		this.add(cameraNY);
 		const cameraPZ = new PerspectiveCamera(fov, aspect, near, far);
 		const cameraPZ = new PerspectiveCamera(fov, aspect, near, far);
 		cameraPZ.layers = this.layers;
 		cameraPZ.layers = this.layers;
 		cameraPZ.up.set(0, -1, 0);
 		cameraPZ.up.set(0, -1, 0);
-		cameraPZ.lookAt(new Vector3(0, 0, 1));
+		cameraPZ.lookAt(0, 0, 1);
 		this.add(cameraPZ);
 		this.add(cameraPZ);
 		const cameraNZ = new PerspectiveCamera(fov, aspect, near, far);
 		const cameraNZ = new PerspectiveCamera(fov, aspect, near, far);
 		cameraNZ.layers = this.layers;
 		cameraNZ.layers = this.layers;
 		cameraNZ.up.set(0, -1, 0);
 		cameraNZ.up.set(0, -1, 0);
-		cameraNZ.lookAt(new Vector3(0, 0, -1));
+		cameraNZ.lookAt(0, 0, -1);
 		this.add(cameraNZ);
 		this.add(cameraNZ);
 	}
 	}
 	update(renderer, scene) {
 	update(renderer, scene) {
@@ -16248,6 +16248,7 @@ class WebXRManager extends EventDispatcher {
 		const scope = this;
 		const scope = this;
 		let session = null;
 		let session = null;
 		let framebufferScaleFactor = 1.0;
 		let framebufferScaleFactor = 1.0;
+		let limitWithNativeFramebufferScaleFactor = false;
 		let referenceSpace = null;
 		let referenceSpace = null;
 		let referenceSpaceType = 'local-floor';
 		let referenceSpaceType = 'local-floor';
 		let customReferenceSpace = null;
 		let customReferenceSpace = null;
@@ -16359,8 +16360,9 @@ class WebXRManager extends EventDispatcher {
 				type: 'sessionend'
 				type: 'sessionend'
 			});
 			});
 		}
 		}
-		this.setFramebufferScaleFactor = function (value) {
+		this.setFramebufferScaleFactor = function (value, limited = false) {
 			framebufferScaleFactor = value;
 			framebufferScaleFactor = value;
+			limitWithNativeFramebufferScaleFactor = limited;
 			if (scope.isPresenting === true) {
 			if (scope.isPresenting === true) {
 				console.warn('THREE.WebXRManager: Cannot change framebuffer scale while presenting.');
 				console.warn('THREE.WebXRManager: Cannot change framebuffer scale while presenting.');
 			}
 			}
@@ -16404,6 +16406,12 @@ class WebXRManager extends EventDispatcher {
 				if (attributes.xrCompatible !== true) {
 				if (attributes.xrCompatible !== true) {
 					await gl.makeXRCompatible();
 					await gl.makeXRCompatible();
 				}
 				}
+				if (limitWithNativeFramebufferScaleFactor === true && XRWebGLLayer.getNativeFramebufferScaleFactor) {
+					const nativeFramebufferScaleFactor = XRWebGLLayer.getNativeFramebufferScaleFactor(session);
+					if (nativeFramebufferScaleFactor < framebufferScaleFactor) {
+						framebufferScaleFactor = nativeFramebufferScaleFactor;
+					}
+				}
 				if (session.renderState.layers === undefined || renderer.capabilities.isWebGL2 === false) {
 				if (session.renderState.layers === undefined || renderer.capabilities.isWebGL2 === false) {
 					const layerInit = {
 					const layerInit = {
 						antialias: session.renderState.layers === undefined ? attributes.antialias : true,
 						antialias: session.renderState.layers === undefined ? attributes.antialias : true,
@@ -19296,12 +19304,12 @@ class LOD extends Object3D {
 		const levels = source.levels;
 		const levels = source.levels;
 		for (let i = 0, l = levels.length; i < l; i++) {
 		for (let i = 0, l = levels.length; i < l; i++) {
 			const level = levels[i];
 			const level = levels[i];
-			this.addLevel(level.object.clone(), level.distance);
+			this.addLevel(level.object.clone(), level.distance, level.hysteresis);
 		}
 		}
 		this.autoUpdate = source.autoUpdate;
 		this.autoUpdate = source.autoUpdate;
 		return this;
 		return this;
 	}
 	}
-	addLevel(object, distance = 0) {
+	addLevel(object, distance = 0, hysteresis = 0) {
 		distance = Math.abs(distance);
 		distance = Math.abs(distance);
 		const levels = this.levels;
 		const levels = this.levels;
 		let l;
 		let l;
@@ -19312,6 +19320,7 @@ class LOD extends Object3D {
 		}
 		}
 		levels.splice(l, 0, {
 		levels.splice(l, 0, {
 			distance: distance,
 			distance: distance,
+			hysteresis: hysteresis,
 			object: object
 			object: object
 		});
 		});
 		this.add(object);
 		this.add(object);
@@ -19325,7 +19334,11 @@ class LOD extends Object3D {
 		if (levels.length > 0) {
 		if (levels.length > 0) {
 			let i, l;
 			let i, l;
 			for (i = 1, l = levels.length; i < l; i++) {
 			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;
 					break;
 				}
 				}
 			}
 			}
@@ -19350,7 +19363,11 @@ class LOD extends Object3D {
 			levels[0].object.visible = true;
 			levels[0].object.visible = true;
 			let i, l;
 			let i, l;
 			for (i = 1, l = levels.length; i < l; i++) {
 			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 - 1].object.visible = false;
 					levels[i].object.visible = true;
 					levels[i].object.visible = true;
 				} else {
 				} else {
@@ -19372,7 +19389,8 @@ class LOD extends Object3D {
 			const level = levels[i];
 			const level = levels[i];
 			data.object.levels.push({
 			data.object.levels.push({
 				object: level.object.uuid,
 				object: level.object.uuid,
-				distance: level.distance
+				distance: level.distance,
+				hysteresis: level.hysteresis
 			});
 			});
 		}
 		}
 		return data;
 		return data;
@@ -27874,7 +27892,7 @@ class ObjectLoader extends Loader {
 				const level = levels[l];
 				const level = levels[l];
 				const child = object.getObjectByProperty('uuid', level.object);
 				const child = object.getObjectByProperty('uuid', level.object);
 				if (child !== undefined) {
 				if (child !== undefined) {
-					object.addLevel(child, level.distance);
+					object.addLevel(child, level.distance, level.hysteresis);
 				}
 				}
 			}
 			}
 		}
 		}

+ 31 - 13
build/three.js

@@ -7837,32 +7837,32 @@
 			const cameraPX = new PerspectiveCamera(fov, aspect, near, far);
 			const cameraPX = new PerspectiveCamera(fov, aspect, near, far);
 			cameraPX.layers = this.layers;
 			cameraPX.layers = this.layers;
 			cameraPX.up.set(0, -1, 0);
 			cameraPX.up.set(0, -1, 0);
-			cameraPX.lookAt(new Vector3(1, 0, 0));
+			cameraPX.lookAt(1, 0, 0);
 			this.add(cameraPX);
 			this.add(cameraPX);
 			const cameraNX = new PerspectiveCamera(fov, aspect, near, far);
 			const cameraNX = new PerspectiveCamera(fov, aspect, near, far);
 			cameraNX.layers = this.layers;
 			cameraNX.layers = this.layers;
 			cameraNX.up.set(0, -1, 0);
 			cameraNX.up.set(0, -1, 0);
-			cameraNX.lookAt(new Vector3(-1, 0, 0));
+			cameraNX.lookAt(-1, 0, 0);
 			this.add(cameraNX);
 			this.add(cameraNX);
 			const cameraPY = new PerspectiveCamera(fov, aspect, near, far);
 			const cameraPY = new PerspectiveCamera(fov, aspect, near, far);
 			cameraPY.layers = this.layers;
 			cameraPY.layers = this.layers;
 			cameraPY.up.set(0, 0, 1);
 			cameraPY.up.set(0, 0, 1);
-			cameraPY.lookAt(new Vector3(0, 1, 0));
+			cameraPY.lookAt(0, 1, 0);
 			this.add(cameraPY);
 			this.add(cameraPY);
 			const cameraNY = new PerspectiveCamera(fov, aspect, near, far);
 			const cameraNY = new PerspectiveCamera(fov, aspect, near, far);
 			cameraNY.layers = this.layers;
 			cameraNY.layers = this.layers;
 			cameraNY.up.set(0, 0, -1);
 			cameraNY.up.set(0, 0, -1);
-			cameraNY.lookAt(new Vector3(0, -1, 0));
+			cameraNY.lookAt(0, -1, 0);
 			this.add(cameraNY);
 			this.add(cameraNY);
 			const cameraPZ = new PerspectiveCamera(fov, aspect, near, far);
 			const cameraPZ = new PerspectiveCamera(fov, aspect, near, far);
 			cameraPZ.layers = this.layers;
 			cameraPZ.layers = this.layers;
 			cameraPZ.up.set(0, -1, 0);
 			cameraPZ.up.set(0, -1, 0);
-			cameraPZ.lookAt(new Vector3(0, 0, 1));
+			cameraPZ.lookAt(0, 0, 1);
 			this.add(cameraPZ);
 			this.add(cameraPZ);
 			const cameraNZ = new PerspectiveCamera(fov, aspect, near, far);
 			const cameraNZ = new PerspectiveCamera(fov, aspect, near, far);
 			cameraNZ.layers = this.layers;
 			cameraNZ.layers = this.layers;
 			cameraNZ.up.set(0, -1, 0);
 			cameraNZ.up.set(0, -1, 0);
-			cameraNZ.lookAt(new Vector3(0, 0, -1));
+			cameraNZ.lookAt(0, 0, -1);
 			this.add(cameraNZ);
 			this.add(cameraNZ);
 		}
 		}
 		update(renderer, scene) {
 		update(renderer, scene) {
@@ -16250,6 +16250,7 @@
 			const scope = this;
 			const scope = this;
 			let session = null;
 			let session = null;
 			let framebufferScaleFactor = 1.0;
 			let framebufferScaleFactor = 1.0;
+			let limitWithNativeFramebufferScaleFactor = false;
 			let referenceSpace = null;
 			let referenceSpace = null;
 			let referenceSpaceType = 'local-floor';
 			let referenceSpaceType = 'local-floor';
 			let customReferenceSpace = null;
 			let customReferenceSpace = null;
@@ -16361,8 +16362,9 @@
 					type: 'sessionend'
 					type: 'sessionend'
 				});
 				});
 			}
 			}
-			this.setFramebufferScaleFactor = function (value) {
+			this.setFramebufferScaleFactor = function (value, limited = false) {
 				framebufferScaleFactor = value;
 				framebufferScaleFactor = value;
+				limitWithNativeFramebufferScaleFactor = limited;
 				if (scope.isPresenting === true) {
 				if (scope.isPresenting === true) {
 					console.warn('THREE.WebXRManager: Cannot change framebuffer scale while presenting.');
 					console.warn('THREE.WebXRManager: Cannot change framebuffer scale while presenting.');
 				}
 				}
@@ -16406,6 +16408,12 @@
 					if (attributes.xrCompatible !== true) {
 					if (attributes.xrCompatible !== true) {
 						await gl.makeXRCompatible();
 						await gl.makeXRCompatible();
 					}
 					}
+					if (limitWithNativeFramebufferScaleFactor === true && XRWebGLLayer.getNativeFramebufferScaleFactor) {
+						const nativeFramebufferScaleFactor = XRWebGLLayer.getNativeFramebufferScaleFactor(session);
+						if (nativeFramebufferScaleFactor < framebufferScaleFactor) {
+							framebufferScaleFactor = nativeFramebufferScaleFactor;
+						}
+					}
 					if (session.renderState.layers === undefined || renderer.capabilities.isWebGL2 === false) {
 					if (session.renderState.layers === undefined || renderer.capabilities.isWebGL2 === false) {
 						const layerInit = {
 						const layerInit = {
 							antialias: session.renderState.layers === undefined ? attributes.antialias : true,
 							antialias: session.renderState.layers === undefined ? attributes.antialias : true,
@@ -19298,12 +19306,12 @@
 			const levels = source.levels;
 			const levels = source.levels;
 			for (let i = 0, l = levels.length; i < l; i++) {
 			for (let i = 0, l = levels.length; i < l; i++) {
 				const level = levels[i];
 				const level = levels[i];
-				this.addLevel(level.object.clone(), level.distance);
+				this.addLevel(level.object.clone(), level.distance, level.hysteresis);
 			}
 			}
 			this.autoUpdate = source.autoUpdate;
 			this.autoUpdate = source.autoUpdate;
 			return this;
 			return this;
 		}
 		}
-		addLevel(object, distance = 0) {
+		addLevel(object, distance = 0, hysteresis = 0) {
 			distance = Math.abs(distance);
 			distance = Math.abs(distance);
 			const levels = this.levels;
 			const levels = this.levels;
 			let l;
 			let l;
@@ -19314,6 +19322,7 @@
 			}
 			}
 			levels.splice(l, 0, {
 			levels.splice(l, 0, {
 				distance: distance,
 				distance: distance,
+				hysteresis: hysteresis,
 				object: object
 				object: object
 			});
 			});
 			this.add(object);
 			this.add(object);
@@ -19327,7 +19336,11 @@
 			if (levels.length > 0) {
 			if (levels.length > 0) {
 				let i, l;
 				let i, l;
 				for (i = 1, l = levels.length; i < l; i++) {
 				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;
 						break;
 					}
 					}
 				}
 				}
@@ -19352,7 +19365,11 @@
 				levels[0].object.visible = true;
 				levels[0].object.visible = true;
 				let i, l;
 				let i, l;
 				for (i = 1, l = levels.length; i < l; i++) {
 				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 - 1].object.visible = false;
 						levels[i].object.visible = true;
 						levels[i].object.visible = true;
 					} else {
 					} else {
@@ -19374,7 +19391,8 @@
 				const level = levels[i];
 				const level = levels[i];
 				data.object.levels.push({
 				data.object.levels.push({
 					object: level.object.uuid,
 					object: level.object.uuid,
-					distance: level.distance
+					distance: level.distance,
+					hysteresis: level.hysteresis
 				});
 				});
 			}
 			}
 			return data;
 			return data;
@@ -27876,7 +27894,7 @@
 					const level = levels[l];
 					const level = levels[l];
 					const child = object.getObjectByProperty('uuid', level.object);
 					const child = object.getObjectByProperty('uuid', level.object);
 					if (child !== undefined) {
 					if (child !== undefined) {
-						object.addLevel(child, level.distance);
+						object.addLevel(child, level.distance, level.hysteresis);
 					}
 					}
 				}
 				}
 			}
 			}

文件差异内容过多而无法显示
+ 0 - 0
build/three.min.js


+ 47 - 14
build/three.module.js

@@ -11886,37 +11886,37 @@ class CubeCamera extends Object3D {
 		const cameraPX = new PerspectiveCamera( fov, aspect, near, far );
 		const cameraPX = new PerspectiveCamera( fov, aspect, near, far );
 		cameraPX.layers = this.layers;
 		cameraPX.layers = this.layers;
 		cameraPX.up.set( 0, - 1, 0 );
 		cameraPX.up.set( 0, - 1, 0 );
-		cameraPX.lookAt( new Vector3( 1, 0, 0 ) );
+		cameraPX.lookAt( 1, 0, 0 );
 		this.add( cameraPX );
 		this.add( cameraPX );
 
 
 		const cameraNX = new PerspectiveCamera( fov, aspect, near, far );
 		const cameraNX = new PerspectiveCamera( fov, aspect, near, far );
 		cameraNX.layers = this.layers;
 		cameraNX.layers = this.layers;
 		cameraNX.up.set( 0, - 1, 0 );
 		cameraNX.up.set( 0, - 1, 0 );
-		cameraNX.lookAt( new Vector3( - 1, 0, 0 ) );
+		cameraNX.lookAt( - 1, 0, 0 );
 		this.add( cameraNX );
 		this.add( cameraNX );
 
 
 		const cameraPY = new PerspectiveCamera( fov, aspect, near, far );
 		const cameraPY = new PerspectiveCamera( fov, aspect, near, far );
 		cameraPY.layers = this.layers;
 		cameraPY.layers = this.layers;
 		cameraPY.up.set( 0, 0, 1 );
 		cameraPY.up.set( 0, 0, 1 );
-		cameraPY.lookAt( new Vector3( 0, 1, 0 ) );
+		cameraPY.lookAt( 0, 1, 0 );
 		this.add( cameraPY );
 		this.add( cameraPY );
 
 
 		const cameraNY = new PerspectiveCamera( fov, aspect, near, far );
 		const cameraNY = new PerspectiveCamera( fov, aspect, near, far );
 		cameraNY.layers = this.layers;
 		cameraNY.layers = this.layers;
 		cameraNY.up.set( 0, 0, - 1 );
 		cameraNY.up.set( 0, 0, - 1 );
-		cameraNY.lookAt( new Vector3( 0, - 1, 0 ) );
+		cameraNY.lookAt( 0, - 1, 0 );
 		this.add( cameraNY );
 		this.add( cameraNY );
 
 
 		const cameraPZ = new PerspectiveCamera( fov, aspect, near, far );
 		const cameraPZ = new PerspectiveCamera( fov, aspect, near, far );
 		cameraPZ.layers = this.layers;
 		cameraPZ.layers = this.layers;
 		cameraPZ.up.set( 0, - 1, 0 );
 		cameraPZ.up.set( 0, - 1, 0 );
-		cameraPZ.lookAt( new Vector3( 0, 0, 1 ) );
+		cameraPZ.lookAt( 0, 0, 1 );
 		this.add( cameraPZ );
 		this.add( cameraPZ );
 
 
 		const cameraNZ = new PerspectiveCamera( fov, aspect, near, far );
 		const cameraNZ = new PerspectiveCamera( fov, aspect, near, far );
 		cameraNZ.layers = this.layers;
 		cameraNZ.layers = this.layers;
 		cameraNZ.up.set( 0, - 1, 0 );
 		cameraNZ.up.set( 0, - 1, 0 );
-		cameraNZ.lookAt( new Vector3( 0, 0, - 1 ) );
+		cameraNZ.lookAt( 0, 0, - 1 );
 		this.add( cameraNZ );
 		this.add( cameraNZ );
 
 
 	}
 	}
@@ -25016,6 +25016,7 @@ class WebXRManager extends EventDispatcher {
 
 
 		let session = null;
 		let session = null;
 		let framebufferScaleFactor = 1.0;
 		let framebufferScaleFactor = 1.0;
+		let limitWithNativeFramebufferScaleFactor = false;
 
 
 		let referenceSpace = null;
 		let referenceSpace = null;
 		let referenceSpaceType = 'local-floor';
 		let referenceSpaceType = 'local-floor';
@@ -25175,9 +25176,10 @@ class WebXRManager extends EventDispatcher {
 
 
 		}
 		}
 
 
-		this.setFramebufferScaleFactor = function ( value ) {
+		this.setFramebufferScaleFactor = function ( value, limited = false ) {
 
 
 			framebufferScaleFactor = value;
 			framebufferScaleFactor = value;
+			limitWithNativeFramebufferScaleFactor = limited;
 
 
 			if ( scope.isPresenting === true ) {
 			if ( scope.isPresenting === true ) {
 
 
@@ -25258,6 +25260,18 @@ class WebXRManager extends EventDispatcher {
 
 
 				}
 				}
 
 
+				if ( limitWithNativeFramebufferScaleFactor === true && XRWebGLLayer.getNativeFramebufferScaleFactor ) {
+
+					const nativeFramebufferScaleFactor = XRWebGLLayer.getNativeFramebufferScaleFactor( session );
+
+					if ( nativeFramebufferScaleFactor < framebufferScaleFactor ) {
+
+						framebufferScaleFactor = nativeFramebufferScaleFactor;
+
+					}
+
+				}
+
 				if ( ( session.renderState.layers === undefined ) || ( renderer.capabilities.isWebGL2 === false ) ) {
 				if ( ( session.renderState.layers === undefined ) || ( renderer.capabilities.isWebGL2 === false ) ) {
 
 
 					const layerInit = {
 					const layerInit = {
@@ -29902,7 +29916,7 @@ class LOD extends Object3D {
 
 
 			const level = levels[ i ];
 			const level = levels[ i ];
 
 
-			this.addLevel( level.object.clone(), level.distance );
+			this.addLevel( level.object.clone(), level.distance, level.hysteresis );
 
 
 		}
 		}
 
 
@@ -29912,7 +29926,7 @@ class LOD extends Object3D {
 
 
 	}
 	}
 
 
-	addLevel( object, distance = 0 ) {
+	addLevel( object, distance = 0, hysteresis = 0 ) {
 
 
 		distance = Math.abs( distance );
 		distance = Math.abs( distance );
 
 
@@ -29930,7 +29944,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 );
 		this.add( object );
 
 
@@ -29944,6 +29958,8 @@ class LOD extends Object3D {
 
 
 	}
 	}
 
 
+
+
 	getObjectForDistance( distance ) {
 	getObjectForDistance( distance ) {
 
 
 		const levels = this.levels;
 		const levels = this.levels;
@@ -29954,7 +29970,15 @@ class LOD extends Object3D {
 
 
 			for ( i = 1, l = levels.length; i < l; i ++ ) {
 			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;
 					break;
 
 
@@ -30003,7 +30027,15 @@ class LOD extends Object3D {
 
 
 			for ( i = 1, l = levels.length; i < l; i ++ ) {
 			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 - 1 ].object.visible = false;
 					levels[ i ].object.visible = true;
 					levels[ i ].object.visible = true;
@@ -30044,7 +30076,8 @@ class LOD extends Object3D {
 
 
 			data.object.levels.push( {
 			data.object.levels.push( {
 				object: level.object.uuid,
 				object: level.object.uuid,
-				distance: level.distance
+				distance: level.distance,
+				hysteresis: level.hysteresis
 			} );
 			} );
 
 
 		}
 		}
@@ -43282,7 +43315,7 @@ class ObjectLoader extends Loader {
 
 
 				if ( child !== undefined ) {
 				if ( child !== undefined ) {
 
 
-					object.addLevel( child, level.distance );
+					object.addLevel( child, level.distance, level.hysteresis );
 
 
 				}
 				}
 
 

部分文件因为文件数量过多而无法显示