Skip to content

Commit dd7d07e

Browse files
committed
OBJLoader/MTLLoader: Added setPath()
1 parent ebce500 commit dd7d07e

3 files changed

Lines changed: 58 additions & 45 deletions

File tree

examples/js/loaders/MTLLoader.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ THREE.MTLLoader.prototype = {
2020

2121
var loader = new THREE.XHRLoader( this.manager );
2222
loader.setCrossOrigin( this.crossOrigin );
23+
loader.setPath( this.path );
2324
loader.load( url, function ( text ) {
2425

2526
onLoad( scope.parse( text ) );
@@ -28,8 +29,16 @@ THREE.MTLLoader.prototype = {
2829

2930
},
3031

32+
setPath: function ( value ) {
33+
34+
this.path = value;
35+
36+
},
37+
3138
setBaseUrl: function( value ) {
3239

40+
// TODO: Merge with setPath()? Or rename to setTexturePath?
41+
3342
this.baseUrl = value;
3443

3544
},

examples/js/loaders/OBJLoader.js

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
THREE.OBJLoader = function ( manager ) {
66

77
this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;
8-
8+
99
this.materials = null;
1010

1111
};
@@ -20,6 +20,7 @@ THREE.OBJLoader.prototype = {
2020

2121
var loader = new THREE.XHRLoader( scope.manager );
2222
loader.setCrossOrigin( this.crossOrigin );
23+
loader.setPath( this.path );
2324
loader.load( url, function ( text ) {
2425

2526
onLoad( scope.parse( text ) );
@@ -33,11 +34,17 @@ THREE.OBJLoader.prototype = {
3334
this.crossOrigin = value;
3435

3536
},
36-
37+
38+
setPath: function ( value ) {
39+
40+
this.path = value;
41+
42+
},
43+
3744
setMaterials: function ( materials ) {
38-
45+
3946
this.materials = materials;
40-
47+
4148
},
4249

4350
parse: function ( text ) {
@@ -50,9 +57,9 @@ THREE.OBJLoader.prototype = {
5057
var vertices = [];
5158
var normals = [];
5259
var uvs = [];
53-
60+
5461
function addObject(name) {
55-
62+
5663
var geometry = {
5764
vertices: [],
5865
normals: [],
@@ -71,7 +78,7 @@ THREE.OBJLoader.prototype = {
7178
};
7279

7380
objects.push( object );
74-
81+
7582
}
7683

7784
function parseVertexIndex( value ) {
@@ -191,7 +198,7 @@ THREE.OBJLoader.prototype = {
191198
}
192199

193200
}
194-
201+
195202
addObject("");
196203

197204
// v float float float
@@ -214,9 +221,9 @@ THREE.OBJLoader.prototype = {
214221

215222
// f vertex//normal vertex//normal vertex//normal ...
216223
var face_pattern4 = /^f\s+((-?\d+)\/\/(-?\d+))\s+((-?\d+)\/\/(-?\d+))\s+((-?\d+)\/\/(-?\d+))(?:\s+((-?\d+)\/\/(-?\d+)))?/;
217-
224+
218225
var object_pattern = /^[og]\s+(.+)/;
219-
226+
220227
var smoothing_pattern = /^s\s+([01]|on|off)/;
221228

222229
//
@@ -301,22 +308,22 @@ THREE.OBJLoader.prototype = {
301308
);
302309

303310
} else if ( ( result = object_pattern.exec( line ) ) !== null ) {
304-
311+
305312
// o object_name
306313
// or
307314
// g group_name
308-
315+
309316
var name = result[1].trim();
310-
317+
311318
if ( foundObjects === false ) {
312-
319+
313320
foundObjects = true;
314321
object.name = name;
315-
322+
316323
} else {
317-
324+
318325
addObject(name);
319-
326+
320327
}
321328

322329
} else if ( /^usemtl /.test( line ) ) {
@@ -332,7 +339,7 @@ THREE.OBJLoader.prototype = {
332339
} else if ( ( result = smoothing_pattern.exec( line ) ) !== null ) {
333340

334341
// smooth shading
335-
342+
336343
object.material.smooth = result[ 1 ] === "1" || result[ 1 ] === "on";
337344

338345
} else {
@@ -359,30 +366,30 @@ THREE.OBJLoader.prototype = {
359366
buffergeometry.addAttribute( 'normal', new THREE.BufferAttribute( new Float32Array( geometry.normals ), 3 ) );
360367

361368
} else {
362-
369+
363370
buffergeometry.computeVertexNormals();
364-
371+
365372
}
366373

367374
if ( geometry.uvs.length > 0 ) {
368375

369376
buffergeometry.addAttribute( 'uv', new THREE.BufferAttribute( new Float32Array( geometry.uvs ), 2 ) );
370377

371378
}
372-
379+
373380
var material;
374-
381+
375382
if ( this.materials !== null ) {
376-
383+
377384
material = this.materials.create( object.material.name );
378-
385+
379386
}
380-
387+
381388
if ( !material ) {
382389

383390
material = new THREE.MeshPhongMaterial();
384391
material.name = object.material.name;
385-
392+
386393
}
387394

388395
material.shading = object.material.smooth ? THREE.SmoothShading : THREE.FlatShading;

examples/webgl_loader_obj_mtl.html

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<!DOCTYPE html>
22
<html lang="en">
33
<head>
4-
<title>three.js webgl - loaders - OBJ MTL loader</title>
4+
<title>three.js webgl - OBJLoader + MTLLoader</title>
55
<meta charset="utf-8">
66
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
77
<style>
@@ -27,7 +27,7 @@
2727

2828
<body>
2929
<div id="info">
30-
<a href="http://threejs.org" target="_blank">three.js</a> - OBJMTLLoader test
30+
<a href="http://threejs.org" target="_blank">three.js</a> - OBJLoader + MTLLoader
3131
</div>
3232

3333
<script src="../build/three.min.js"></script>
@@ -84,29 +84,26 @@
8484
};
8585

8686
var onError = function ( xhr ) { };
87-
87+
8888
THREE.Loader.Handlers.add( /\.dds$/i, new THREE.DDSLoader() );
89-
90-
var objLoader = new THREE.OBJLoader();
91-
var mtlLoader = new THREE.MTLLoader(objLoader.manager);
92-
93-
var mtlUrl = 'obj/male02/male02_dds.mtl';
94-
var objUrl = 'obj/male02/male02.obj';
95-
96-
mtlLoader.setBaseUrl( objUrl.substr( 0, objUrl.lastIndexOf( "/" ) + 1 ) );
97-
98-
mtlLoader.load( mtlUrl, function( materials ) {
99-
89+
90+
var mtlLoader = new THREE.MTLLoader();
91+
mtlLoader.setBaseUrl( 'obj/male02/' );
92+
mtlLoader.setPath( 'obj/male02/' );
93+
mtlLoader.load( 'male02_dds.mtl', function( materials ) {
94+
10095
materials.preload();
96+
97+
var objLoader = new THREE.OBJLoader();
10198
objLoader.setMaterials( materials );
102-
103-
objLoader.load( objUrl, function ( object ) {
104-
99+
objLoader.setPath( 'obj/male02/' );
100+
objLoader.load( 'male02.obj', function ( object ) {
101+
105102
object.position.y = - 80;
106103
scene.add( object );
107-
104+
108105
}, onProgress, onError );
109-
106+
110107
});
111108

112109
//

0 commit comments

Comments
 (0)