فهرست منبع

MTLLoader: Support for texture parameters (#9311)

* MTLLoader: Support for texture parameters

 -s u v w for scale (w is ignored)
 -o u v w for offset (w is ignored)
 -bm s for bumpmap scale

* Fix positional argument to get bumpmap scale

* Trim texture url to prevent trailing spaces

* Fix calls to getTextureParams (pass material parameters)

* Add missing 'var's
Jan Hammerschmidt 9 سال پیش
والد
کامیت
dfc2b26fda
1فایلهای تغییر یافته به همراه52 افزوده شده و 2 حذف شده
  1. 52 2
      examples/js/loaders/MTLLoader.js

+ 52 - 2
examples/js/loaders/MTLLoader.js

@@ -390,7 +390,12 @@ THREE.MTLLoader.MaterialCreator.prototype = {
 
 					if ( params.map ) break; // Keep the first encountered texture
 
-					params.map = this.loadTexture( resolveURL( this.baseUrl, value ) );
+					var texParams = this.getTextureParams( value, params );
+
+					params.map = this.loadTexture( resolveURL( this.baseUrl, texParams.url ) );
+					params.map.repeat.copy( texParams.scale );
+					params.map.offset.copy( texParams.offset );
+
 					params.map.wrapS = this.wrap;
 					params.map.wrapT = this.wrap;
 
@@ -446,7 +451,12 @@ THREE.MTLLoader.MaterialCreator.prototype = {
 
 					if ( params.bumpMap ) break; // Keep the first encountered texture
 
-					params.bumpMap = this.loadTexture( resolveURL( this.baseUrl, value ) );
+					var texParams = this.getTextureParams( value, params );					
+
+					params.bumpMap = this.loadTexture( resolveURL( this.baseUrl, texParams.url ) );
+					params.bumpMap.repeat.copy( texParams.scale );
+					params.bumpMap.offset.copy( texParams.offset );
+ 
 					params.bumpMap.wrapS = this.wrap;
 					params.bumpMap.wrapT = this.wrap;
 
@@ -461,6 +471,46 @@ THREE.MTLLoader.MaterialCreator.prototype = {
 
 		this.materials[ materialName ] = new THREE.MeshPhongMaterial( params );
 		return this.materials[ materialName ];
+	},
+
+	getTextureParams: function( value, matParams ) {
+
+		var texParams = {
+
+			scale: new THREE.Vector2( 1, 1 ),
+			offset: new THREE.Vector2( 0, 0 ),
+
+		 };
+
+		var items = value.split(/\s+/);
+		var pos;
+
+		pos = items.indexOf('-bm');
+		if (pos >= 0) {
+
+			matParams.bumpScale = parseFloat( items[pos+1] );
+			items.splice( pos, 2 );
+
+		}
+
+		pos = items.indexOf('-s');
+		if (pos >= 0) {
+
+			texParams.scale.set( parseFloat( items[pos+1] ), parseFloat( items[pos+2] ) );
+			items.splice( pos, 4 ); // we expect 3 parameters here!
+
+		}
+
+		pos = items.indexOf('-o');
+		if (pos >= 0) {
+
+			texParams.offset.set( parseFloat( items[pos+1] ), parseFloat( items[pos+2] ) );
+			items.splice( pos, 4 ); // we expect 3 parameters here!
+
+		}
+
+		texParams.url = items.join(' ').trim();
+		return texParams;
 
 	},