Mr.doob před 8 roky
rodič
revize
36444d5660
3 změnil soubory, kde provedl 569 přidání a 532 odebrání
  1. 116 98
      build/three.js
  2. 337 336
      build/three.min.js
  3. 116 98
      build/three.module.js

+ 116 - 98
build/three.js

@@ -16527,8 +16527,8 @@
 
 
 		function sort() {
 		function sort() {
 
 
-			opaque.sort( painterSortStable );
-			transparent.sort( reversePainterSortStable );
+			if ( opaque.length > 1 ) opaque.sort( painterSortStable );
+			if ( transparent.length > 1 ) transparent.sort( reversePainterSortStable );
 
 
 		}
 		}
 
 
@@ -16579,6 +16579,115 @@
 
 
 	}
 	}
 
 
+	/**
+	 * @author mrdoob / http://mrdoob.com/
+	 */
+
+	function absNumericalSort( a, b ) {
+
+		return Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );
+
+	}
+
+	function WebGLMorphtargets( gl ) {
+
+		var influencesList = {};
+		var morphInfluences = new Float32Array( 8 );
+
+		function update( object, geometry, material, program ) {
+
+			var objectInfluences = object.morphTargetInfluences;
+
+			var length = objectInfluences.length;
+
+			var influences = influencesList[ geometry.id ];
+
+			if ( influences === undefined ) {
+
+				// initialise list
+
+				influences = [];
+
+				for ( var i = 0; i < length; i ++ ) {
+
+					influences[ i ] = [ i, 0 ];
+
+				}
+
+				influencesList[ geometry.id ] = influences;
+
+			}
+
+			var morphTargets = material.morphTargets && geometry.morphAttributes.position;
+			var morphNormals = material.morphNormals && geometry.morphAttributes.normal;
+
+			// Remove current morphAttributes
+
+			for ( var i = 0; i < length; i ++ ) {
+
+				var influence = influences[ i ];
+
+				if ( influence[ 1 ] !== 0 ) {
+
+					if ( morphTargets ) geometry.removeAttribute( 'morphTarget' + i );
+					if ( morphNormals ) geometry.removeAttribute( 'morphNormal' + i );
+
+				}
+
+			}
+
+			// Collect influences
+
+			for ( var i = 0; i < length; i ++ ) {
+
+				var influence = influences[ i ];
+
+				influence[ 0 ] = i;
+				influence[ 1 ] = objectInfluences[ i ];
+
+			}
+
+			influences.sort( absNumericalSort );
+
+			// Add morphAttributes
+
+			for ( var i = 0; i < 8; i ++ ) {
+
+				var influence = influences[ i ];
+
+				if ( influence ) {
+
+					var index = influence[ 0 ];
+					var value = influence[ 1 ];
+
+					if ( value ) {
+
+						if ( morphTargets ) geometry.addAttribute( 'morphTarget' + i, morphTargets[ index ] );
+						if ( morphNormals ) geometry.addAttribute( 'morphNormal' + i, morphNormals[ index ] );
+
+						morphInfluences[ i ] = value;
+						continue;
+
+					}
+
+				}
+
+				morphInfluences[ i ] = 0;
+
+			}
+
+			program.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences );
+
+		}
+
+		return {
+
+			update: update
+
+		}
+
+	}
+
 	/**
 	/**
 	 * @author mrdoob / http://mrdoob.com/
 	 * @author mrdoob / http://mrdoob.com/
 	 */
 	 */
@@ -20663,8 +20772,6 @@
 
 
 		var currentRenderList = null;
 		var currentRenderList = null;
 
 
-		var morphInfluences = new Float32Array( 8 );
-
 		var spritesArray = [];
 		var spritesArray = [];
 		var flaresArray = [];
 		var flaresArray = [];
 
 
@@ -20848,7 +20955,7 @@
 		var properties, textures, attributes, geometries, objects, lights;
 		var properties, textures, attributes, geometries, objects, lights;
 		var programCache, renderLists;
 		var programCache, renderLists;
 
 
-		var background, bufferRenderer, indexedBufferRenderer;
+		var background, morphtargets, bufferRenderer, indexedBufferRenderer;
 		var flareRenderer, spriteRenderer;
 		var flareRenderer, spriteRenderer;
 
 
 		function initGLContext() {
 		function initGLContext() {
@@ -20879,6 +20986,7 @@
 			attributes = new WebGLAttributes( _gl );
 			attributes = new WebGLAttributes( _gl );
 			geometries = new WebGLGeometries( _gl, attributes, _infoMemory );
 			geometries = new WebGLGeometries( _gl, attributes, _infoMemory );
 			objects = new WebGLObjects( geometries, _infoRender );
 			objects = new WebGLObjects( geometries, _infoRender );
+			morphtargets = new WebGLMorphtargets( _gl );
 			programCache = new WebGLPrograms( _this, extensions, capabilities );
 			programCache = new WebGLPrograms( _this, extensions, capabilities );
 			lights = new WebGLLights();
 			lights = new WebGLLights();
 			renderLists = new WebGLRenderLists();
 			renderLists = new WebGLRenderLists();
@@ -21260,14 +21368,6 @@
 
 
 		};
 		};
 
 
-		var influencesList = {};
-
-		function absNumericalSort( a, b ) {
-
-			return Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );
-
-		}
-
 		this.renderBufferDirect = function ( camera, fog, geometry, material, object, group ) {
 		this.renderBufferDirect = function ( camera, fog, geometry, material, object, group ) {
 
 
 			state.setMaterial( material );
 			state.setMaterial( material );
@@ -21284,91 +21384,9 @@
 
 
 			}
 			}
 
 
-			// morph targets
-
-			var objectInfluences = object.morphTargetInfluences;
-
-			if ( objectInfluences !== undefined ) {
-
-				var length = objectInfluences.length;
-
-				var influences = influencesList[ geometry.id ];
-
-				if ( influences === undefined ) {
-
-					// initialise list
-
-					influences = [];
-
-					for ( var i = 0; i < length; i ++ ) {
-
-						influences[ i ] = [ i, 0 ];
-
-					}
-
-					influencesList[ geometry.id ] = influences;
-
-				}
-
-				var morphTargets = material.morphTargets && geometry.morphAttributes.position;
-				var morphNormals = material.morphNormals && geometry.morphAttributes.normal;
-
-				// Remove current morphAttributes
-
-				for ( var i = 0; i < length; i ++ ) {
-
-					var influence = influences[ i ];
-
-					if ( influence[ 1 ] !== 0 ) {
-
-						if ( morphTargets ) geometry.removeAttribute( 'morphTarget' + i );
-						if ( morphNormals ) geometry.removeAttribute( 'morphNormal' + i );
-
-					}
-
-				}
-
-				// Collect influences
-
-				for ( var i = 0; i < length; i ++ ) {
-
-					var influence = influences[ i ];
-
-					influence[ 0 ] = i;
-					influence[ 1 ] = objectInfluences[ i ];
-
-				}
-
-				influences.sort( absNumericalSort );
-
-				// Add morphAttributes
-
-				for ( var i = 0; i < 8; i ++ ) {
-
-					var influence = influences[ i ];
-
-					if ( influence ) {
-
-						var index = influence[ 0 ];
-						var value = influence[ 1 ];
-
-						if ( value ) {
-
-							if ( morphTargets ) geometry.addAttribute( 'morphTarget' + i, morphTargets[ index ] );
-							if ( morphNormals ) geometry.addAttribute( 'morphNormal' + i, morphNormals[ index ] );
-
-							morphInfluences[ i ] = value;
-							continue;
-
-						}
-
-					}
-
-					morphInfluences[ i ] = 0;
-
-				}
+			if ( object.morphTargetInfluences ) {
 
 
-				program.getUniforms().setValue( _gl, 'morphTargetInfluences', morphInfluences );
+				morphtargets.update( object, geometry, material, program );
 
 
 				updateBuffers = true;
 				updateBuffers = true;
 
 
@@ -32312,7 +32330,7 @@
 
 
 			} else {
 			} else {
 
 
-				// by default, we asssume a constructor compatible with the base
+				// by default, we assume a constructor compatible with the base
 				return new trackType(
 				return new trackType(
 						json.name, json.times, json.values, json.interpolation );
 						json.name, json.times, json.values, json.interpolation );
 
 

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 337 - 336
build/three.min.js


+ 116 - 98
build/three.module.js

@@ -16521,8 +16521,8 @@ function WebGLRenderList() {
 
 
 	function sort() {
 	function sort() {
 
 
-		opaque.sort( painterSortStable );
-		transparent.sort( reversePainterSortStable );
+		if ( opaque.length > 1 ) opaque.sort( painterSortStable );
+		if ( transparent.length > 1 ) transparent.sort( reversePainterSortStable );
 
 
 	}
 	}
 
 
@@ -16573,6 +16573,115 @@ function WebGLRenderLists() {
 
 
 }
 }
 
 
+/**
+ * @author mrdoob / http://mrdoob.com/
+ */
+
+function absNumericalSort( a, b ) {
+
+	return Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );
+
+}
+
+function WebGLMorphtargets( gl ) {
+
+	var influencesList = {};
+	var morphInfluences = new Float32Array( 8 );
+
+	function update( object, geometry, material, program ) {
+
+		var objectInfluences = object.morphTargetInfluences;
+
+		var length = objectInfluences.length;
+
+		var influences = influencesList[ geometry.id ];
+
+		if ( influences === undefined ) {
+
+			// initialise list
+
+			influences = [];
+
+			for ( var i = 0; i < length; i ++ ) {
+
+				influences[ i ] = [ i, 0 ];
+
+			}
+
+			influencesList[ geometry.id ] = influences;
+
+		}
+
+		var morphTargets = material.morphTargets && geometry.morphAttributes.position;
+		var morphNormals = material.morphNormals && geometry.morphAttributes.normal;
+
+		// Remove current morphAttributes
+
+		for ( var i = 0; i < length; i ++ ) {
+
+			var influence = influences[ i ];
+
+			if ( influence[ 1 ] !== 0 ) {
+
+				if ( morphTargets ) geometry.removeAttribute( 'morphTarget' + i );
+				if ( morphNormals ) geometry.removeAttribute( 'morphNormal' + i );
+
+			}
+
+		}
+
+		// Collect influences
+
+		for ( var i = 0; i < length; i ++ ) {
+
+			var influence = influences[ i ];
+
+			influence[ 0 ] = i;
+			influence[ 1 ] = objectInfluences[ i ];
+
+		}
+
+		influences.sort( absNumericalSort );
+
+		// Add morphAttributes
+
+		for ( var i = 0; i < 8; i ++ ) {
+
+			var influence = influences[ i ];
+
+			if ( influence ) {
+
+				var index = influence[ 0 ];
+				var value = influence[ 1 ];
+
+				if ( value ) {
+
+					if ( morphTargets ) geometry.addAttribute( 'morphTarget' + i, morphTargets[ index ] );
+					if ( morphNormals ) geometry.addAttribute( 'morphNormal' + i, morphNormals[ index ] );
+
+					morphInfluences[ i ] = value;
+					continue;
+
+				}
+
+			}
+
+			morphInfluences[ i ] = 0;
+
+		}
+
+		program.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences );
+
+	}
+
+	return {
+
+		update: update
+
+	}
+
+}
+
 /**
 /**
  * @author mrdoob / http://mrdoob.com/
  * @author mrdoob / http://mrdoob.com/
  */
  */
@@ -20657,8 +20766,6 @@ function WebGLRenderer( parameters ) {
 
 
 	var currentRenderList = null;
 	var currentRenderList = null;
 
 
-	var morphInfluences = new Float32Array( 8 );
-
 	var spritesArray = [];
 	var spritesArray = [];
 	var flaresArray = [];
 	var flaresArray = [];
 
 
@@ -20842,7 +20949,7 @@ function WebGLRenderer( parameters ) {
 	var properties, textures, attributes, geometries, objects, lights;
 	var properties, textures, attributes, geometries, objects, lights;
 	var programCache, renderLists;
 	var programCache, renderLists;
 
 
-	var background, bufferRenderer, indexedBufferRenderer;
+	var background, morphtargets, bufferRenderer, indexedBufferRenderer;
 	var flareRenderer, spriteRenderer;
 	var flareRenderer, spriteRenderer;
 
 
 	function initGLContext() {
 	function initGLContext() {
@@ -20873,6 +20980,7 @@ function WebGLRenderer( parameters ) {
 		attributes = new WebGLAttributes( _gl );
 		attributes = new WebGLAttributes( _gl );
 		geometries = new WebGLGeometries( _gl, attributes, _infoMemory );
 		geometries = new WebGLGeometries( _gl, attributes, _infoMemory );
 		objects = new WebGLObjects( geometries, _infoRender );
 		objects = new WebGLObjects( geometries, _infoRender );
+		morphtargets = new WebGLMorphtargets( _gl );
 		programCache = new WebGLPrograms( _this, extensions, capabilities );
 		programCache = new WebGLPrograms( _this, extensions, capabilities );
 		lights = new WebGLLights();
 		lights = new WebGLLights();
 		renderLists = new WebGLRenderLists();
 		renderLists = new WebGLRenderLists();
@@ -21254,14 +21362,6 @@ function WebGLRenderer( parameters ) {
 
 
 	};
 	};
 
 
-	var influencesList = {};
-
-	function absNumericalSort( a, b ) {
-
-		return Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );
-
-	}
-
 	this.renderBufferDirect = function ( camera, fog, geometry, material, object, group ) {
 	this.renderBufferDirect = function ( camera, fog, geometry, material, object, group ) {
 
 
 		state.setMaterial( material );
 		state.setMaterial( material );
@@ -21278,91 +21378,9 @@ function WebGLRenderer( parameters ) {
 
 
 		}
 		}
 
 
-		// morph targets
-
-		var objectInfluences = object.morphTargetInfluences;
-
-		if ( objectInfluences !== undefined ) {
-
-			var length = objectInfluences.length;
-
-			var influences = influencesList[ geometry.id ];
-
-			if ( influences === undefined ) {
-
-				// initialise list
-
-				influences = [];
-
-				for ( var i = 0; i < length; i ++ ) {
-
-					influences[ i ] = [ i, 0 ];
-
-				}
-
-				influencesList[ geometry.id ] = influences;
-
-			}
-
-			var morphTargets = material.morphTargets && geometry.morphAttributes.position;
-			var morphNormals = material.morphNormals && geometry.morphAttributes.normal;
-
-			// Remove current morphAttributes
-
-			for ( var i = 0; i < length; i ++ ) {
-
-				var influence = influences[ i ];
-
-				if ( influence[ 1 ] !== 0 ) {
-
-					if ( morphTargets ) geometry.removeAttribute( 'morphTarget' + i );
-					if ( morphNormals ) geometry.removeAttribute( 'morphNormal' + i );
-
-				}
-
-			}
-
-			// Collect influences
-
-			for ( var i = 0; i < length; i ++ ) {
-
-				var influence = influences[ i ];
-
-				influence[ 0 ] = i;
-				influence[ 1 ] = objectInfluences[ i ];
-
-			}
-
-			influences.sort( absNumericalSort );
-
-			// Add morphAttributes
-
-			for ( var i = 0; i < 8; i ++ ) {
-
-				var influence = influences[ i ];
-
-				if ( influence ) {
-
-					var index = influence[ 0 ];
-					var value = influence[ 1 ];
-
-					if ( value ) {
-
-						if ( morphTargets ) geometry.addAttribute( 'morphTarget' + i, morphTargets[ index ] );
-						if ( morphNormals ) geometry.addAttribute( 'morphNormal' + i, morphNormals[ index ] );
-
-						morphInfluences[ i ] = value;
-						continue;
-
-					}
-
-				}
-
-				morphInfluences[ i ] = 0;
-
-			}
+		if ( object.morphTargetInfluences ) {
 
 
-			program.getUniforms().setValue( _gl, 'morphTargetInfluences', morphInfluences );
+			morphtargets.update( object, geometry, material, program );
 
 
 			updateBuffers = true;
 			updateBuffers = true;
 
 
@@ -32306,7 +32324,7 @@ Object.assign( KeyframeTrack, {
 
 
 		} else {
 		} else {
 
 
-			// by default, we asssume a constructor compatible with the base
+			// by default, we assume a constructor compatible with the base
 			return new trackType(
 			return new trackType(
 					json.name, json.times, json.values, json.interpolation );
 					json.name, json.times, json.values, json.interpolation );
 
 

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů