Skip to content

Commit dfc2b26

Browse files
JanHammerschmidtmrdoob
authored andcommitted
MTLLoader: Support for texture parameters (mrdoob#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
1 parent a569966 commit dfc2b26

File tree

1 file changed

+52
-2
lines changed

1 file changed

+52
-2
lines changed

examples/js/loaders/MTLLoader.js

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,12 @@ THREE.MTLLoader.MaterialCreator.prototype = {
390390

391391
if ( params.map ) break; // Keep the first encountered texture
392392

393-
params.map = this.loadTexture( resolveURL( this.baseUrl, value ) );
393+
var texParams = this.getTextureParams( value, params );
394+
395+
params.map = this.loadTexture( resolveURL( this.baseUrl, texParams.url ) );
396+
params.map.repeat.copy( texParams.scale );
397+
params.map.offset.copy( texParams.offset );
398+
394399
params.map.wrapS = this.wrap;
395400
params.map.wrapT = this.wrap;
396401

@@ -446,7 +451,12 @@ THREE.MTLLoader.MaterialCreator.prototype = {
446451

447452
if ( params.bumpMap ) break; // Keep the first encountered texture
448453

449-
params.bumpMap = this.loadTexture( resolveURL( this.baseUrl, value ) );
454+
var texParams = this.getTextureParams( value, params );
455+
456+
params.bumpMap = this.loadTexture( resolveURL( this.baseUrl, texParams.url ) );
457+
params.bumpMap.repeat.copy( texParams.scale );
458+
params.bumpMap.offset.copy( texParams.offset );
459+
450460
params.bumpMap.wrapS = this.wrap;
451461
params.bumpMap.wrapT = this.wrap;
452462

@@ -461,6 +471,46 @@ THREE.MTLLoader.MaterialCreator.prototype = {
461471

462472
this.materials[ materialName ] = new THREE.MeshPhongMaterial( params );
463473
return this.materials[ materialName ];
474+
},
475+
476+
getTextureParams: function( value, matParams ) {
477+
478+
var texParams = {
479+
480+
scale: new THREE.Vector2( 1, 1 ),
481+
offset: new THREE.Vector2( 0, 0 ),
482+
483+
};
484+
485+
var items = value.split(/\s+/);
486+
var pos;
487+
488+
pos = items.indexOf('-bm');
489+
if (pos >= 0) {
490+
491+
matParams.bumpScale = parseFloat( items[pos+1] );
492+
items.splice( pos, 2 );
493+
494+
}
495+
496+
pos = items.indexOf('-s');
497+
if (pos >= 0) {
498+
499+
texParams.scale.set( parseFloat( items[pos+1] ), parseFloat( items[pos+2] ) );
500+
items.splice( pos, 4 ); // we expect 3 parameters here!
501+
502+
}
503+
504+
pos = items.indexOf('-o');
505+
if (pos >= 0) {
506+
507+
texParams.offset.set( parseFloat( items[pos+1] ), parseFloat( items[pos+2] ) );
508+
items.splice( pos, 4 ); // we expect 3 parameters here!
509+
510+
}
511+
512+
texParams.url = items.join(' ').trim();
513+
return texParams;
464514

465515
},
466516

0 commit comments

Comments
 (0)