mirror of https://github.com/CesiumGS/obj2gltf.git
Port over #116
This commit is contained in:
parent
e538ded771
commit
05e9788fea
|
@ -8,6 +8,7 @@ Change Log
|
||||||
* Fixed handling of unnormalized input normals. [#163](https://github.com/AnalyticalGraphicsInc/obj2gltf/pull/163)
|
* Fixed handling of unnormalized input normals. [#163](https://github.com/AnalyticalGraphicsInc/obj2gltf/pull/163)
|
||||||
* Added ability to use the first material in the mtl file when the obj is missing `usemtl`. [#163](https://github.com/AnalyticalGraphicsInc/obj2gltf/pull/163)
|
* Added ability to use the first material in the mtl file when the obj is missing `usemtl`. [#163](https://github.com/AnalyticalGraphicsInc/obj2gltf/pull/163)
|
||||||
* Fixed loading faces that contain less than 3 vertices. [#163](https://github.com/AnalyticalGraphicsInc/obj2gltf/pull/163)
|
* Fixed loading faces that contain less than 3 vertices. [#163](https://github.com/AnalyticalGraphicsInc/obj2gltf/pull/163)
|
||||||
|
* Fixed loading mtllib paths that contain spaces. [#163](https://github.com/AnalyticalGraphicsInc/obj2gltf/pull/163)
|
||||||
|
|
||||||
### 1.3.4 2018-10-16
|
### 1.3.4 2018-10-16
|
||||||
|
|
||||||
|
|
|
@ -346,8 +346,8 @@ function loadObj(objPath, options) {
|
||||||
var materialName = line.substring(7).trim();
|
var materialName = line.substring(7).trim();
|
||||||
useMaterial(materialName);
|
useMaterial(materialName);
|
||||||
} else if (/^mtllib/i.test(line)) {
|
} else if (/^mtllib/i.test(line)) {
|
||||||
var paths = line.substring(7).trim().split(' ');
|
var mtllibLine = line.substring(7).trim();
|
||||||
mtlPaths = mtlPaths.concat(paths);
|
mtlPaths = mtlPaths.concat(getMtlPaths(mtllibLine));
|
||||||
} else if ((result = vertexPattern.exec(line)) !== null) {
|
} else if ((result = vertexPattern.exec(line)) !== null) {
|
||||||
var position = scratchCartesian;
|
var position = scratchCartesian;
|
||||||
position.x = parseFloat(result[1]);
|
position.x = parseFloat(result[1]);
|
||||||
|
@ -419,6 +419,23 @@ function loadObj(objPath, options) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getMtlPaths(mtllibLine) {
|
||||||
|
// Handle paths with spaces. E.g. mtllib my material file.mtl
|
||||||
|
var mtlPaths = [];
|
||||||
|
var splits = mtllibLine.split(' ');
|
||||||
|
var length = splits.length;
|
||||||
|
var startIndex = 0;
|
||||||
|
for (var i = 0; i < length; ++i) {
|
||||||
|
if (path.extname(splits[i]) !== '.mtl') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
var mtlPath = splits.slice(startIndex, i + 1).join(' ');
|
||||||
|
mtlPaths.push(mtlPath);
|
||||||
|
startIndex = i + 1;
|
||||||
|
}
|
||||||
|
return mtlPaths;
|
||||||
|
}
|
||||||
|
|
||||||
function finishLoading(nodes, mtlPaths, objPath, usesMaterials, options) {
|
function finishLoading(nodes, mtlPaths, objPath, usesMaterials, options) {
|
||||||
nodes = cleanNodes(nodes);
|
nodes = cleanNodes(nodes);
|
||||||
if (nodes.length === 0) {
|
if (nodes.length === 0) {
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
# Blender MTL File: 'box-multiple-materials.blend'
|
||||||
|
# Material Count: 1
|
||||||
|
|
||||||
|
newmtl Blue
|
||||||
|
Ns 96.078431
|
||||||
|
Ka 0.000000 0.000000 0.000000
|
||||||
|
Kd 0.000000 0.000000 0.640000
|
||||||
|
Ks 0.500000 0.500000 0.500000
|
||||||
|
Ke 0.000000 0.000000 0.000000
|
||||||
|
Ni 1.000000
|
||||||
|
d 1.000000
|
||||||
|
illum 2
|
|
@ -0,0 +1,12 @@
|
||||||
|
# Blender MTL File: 'box-multiple-materials.blend'
|
||||||
|
# Material Count: 1
|
||||||
|
|
||||||
|
newmtl Green
|
||||||
|
Ns 96.078431
|
||||||
|
Ka 0.000000 0.000000 0.000000
|
||||||
|
Kd 0.000000 0.640000 0.000000
|
||||||
|
Ks 0.500000 0.500000 0.500000
|
||||||
|
Ke 0.000000 0.000000 0.000000
|
||||||
|
Ni 1.000000
|
||||||
|
d 1.000000
|
||||||
|
illum 2
|
|
@ -0,0 +1,12 @@
|
||||||
|
# Blender MTL File: 'box-multiple-materials.blend'
|
||||||
|
# Material Count: 1
|
||||||
|
|
||||||
|
newmtl Red
|
||||||
|
Ns 96.078431
|
||||||
|
Ka 0.000000 0.000000 0.000000
|
||||||
|
Kd 0.640000 0.000000 0.000000
|
||||||
|
Ks 0.500000 0.500000 0.500000
|
||||||
|
Ke 0.000000 0.000000 0.000000
|
||||||
|
Ni 1.000000
|
||||||
|
d 1.000000
|
||||||
|
illum 2
|
|
@ -0,0 +1,50 @@
|
||||||
|
# Blender v2.78 (sub 0) OBJ File: 'box-multiple-materials.blend'
|
||||||
|
# www.blender.org
|
||||||
|
mtllib box mtllib red.mtl
|
||||||
|
mtllib box mtllib green.mtl box mtllib blue.mtl
|
||||||
|
v -1.000000 -1.000000 1.000000
|
||||||
|
v -1.000000 1.000000 1.000000
|
||||||
|
v -1.000000 -1.000000 -1.000000
|
||||||
|
v -1.000000 1.000000 -1.000000
|
||||||
|
v 1.000000 -1.000000 1.000000
|
||||||
|
v 1.000000 1.000000 1.000000
|
||||||
|
v 1.000000 -1.000000 -1.000000
|
||||||
|
v 1.000000 1.000000 -1.000000
|
||||||
|
vt 0.0000 0.0000
|
||||||
|
vt 1.0000 0.0000
|
||||||
|
vt 1.0000 1.0000
|
||||||
|
vt 0.0000 1.0000
|
||||||
|
vt 0.0000 0.0000
|
||||||
|
vt 1.0000 0.0000
|
||||||
|
vt 1.0000 1.0000
|
||||||
|
vt 0.0000 1.0000
|
||||||
|
vt 0.0000 0.0000
|
||||||
|
vt 1.0000 0.0000
|
||||||
|
vt 1.0000 1.0000
|
||||||
|
vt 0.0000 1.0000
|
||||||
|
vt 0.0000 0.0000
|
||||||
|
vt 1.0000 0.0000
|
||||||
|
vt 1.0000 1.0000
|
||||||
|
vt 0.0000 1.0000
|
||||||
|
vt 1.0000 1.0000
|
||||||
|
vt 0.0000 1.0000
|
||||||
|
vt 0.0000 0.0000
|
||||||
|
vt 1.0000 0.0000
|
||||||
|
vn 0.0000 -1.0000 0.0000
|
||||||
|
vn 0.0000 1.0000 0.0000
|
||||||
|
vn -1.0000 0.0000 0.0000
|
||||||
|
vn 1.0000 0.0000 0.0000
|
||||||
|
vn 0.0000 0.0000 -1.0000
|
||||||
|
vn 0.0000 0.0000 1.0000
|
||||||
|
usemtl Red
|
||||||
|
f 3/1/1 7/2/1 5/3/1 1/4/1
|
||||||
|
usemtl Green
|
||||||
|
f 1/9/3 2/10/3 4/11/3 3/12/3
|
||||||
|
usemtl Blue
|
||||||
|
f 3/1/5 4/6/5 8/17/5 7/18/5
|
||||||
|
usemtl Red
|
||||||
|
f 8/5/2 4/6/2 2/7/2 6/8/2
|
||||||
|
usemtl Green
|
||||||
|
f 7/13/4 8/14/4 6/15/4 5/16/4
|
||||||
|
usemtl Blue
|
||||||
|
f 5/19/6 6/20/6 2/7/6 1/4/6
|
|
@ -27,6 +27,7 @@ var objNoMaterialsUrl = 'specs/data/box-no-materials/box-no-materials.obj';
|
||||||
var objMultipleMaterialsUrl = 'specs/data/box-multiple-materials/box-multiple-materials.obj';
|
var objMultipleMaterialsUrl = 'specs/data/box-multiple-materials/box-multiple-materials.obj';
|
||||||
var objUncleanedUrl = 'specs/data/box-uncleaned/box-uncleaned.obj';
|
var objUncleanedUrl = 'specs/data/box-uncleaned/box-uncleaned.obj';
|
||||||
var objMtllibUrl = 'specs/data/box-mtllib/box-mtllib.obj';
|
var objMtllibUrl = 'specs/data/box-mtllib/box-mtllib.obj';
|
||||||
|
var objMtllibSpacesUrl = 'specs/data/box-mtllib-spaces/box mtllib.obj';
|
||||||
var objMissingMtllibUrl = 'specs/data/box-missing-mtllib/box-missing-mtllib.obj';
|
var objMissingMtllibUrl = 'specs/data/box-missing-mtllib/box-missing-mtllib.obj';
|
||||||
var objMissingUsemtlUrl = 'specs/data/box-missing-usemtl/box-missing-usemtl.obj';
|
var objMissingUsemtlUrl = 'specs/data/box-missing-usemtl/box-missing-usemtl.obj';
|
||||||
var objExternalResourcesUrl = 'specs/data/box-external-resources/box-external-resources.obj';
|
var objExternalResourcesUrl = 'specs/data/box-external-resources/box-external-resources.obj';
|
||||||
|
@ -313,6 +314,17 @@ describe('loadObj', function() {
|
||||||
}), done).toResolve();
|
}), done).toResolve();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('loads obj with mtllib paths with spaces', function(done) {
|
||||||
|
expect(loadObj(objMtllibSpacesUrl, defaultOptions)
|
||||||
|
.then(function(data) {
|
||||||
|
var materials = data.materials;
|
||||||
|
expect(Object.keys(materials).length).toBe(3);
|
||||||
|
expect(materials['Blue'].diffuseColor).toEqual([0.0, 0.0, 0.64, 1.0]);
|
||||||
|
expect(materials['Green'].diffuseColor).toEqual([0.0, 0.64, 0.0, 1.0]);
|
||||||
|
expect(materials['Red'].diffuseColor).toEqual([0.64, 0.0, 0.0, 1.0]);
|
||||||
|
}), done).toResolve();
|
||||||
|
});
|
||||||
|
|
||||||
it('loads obj with missing mtllib', function(done) {
|
it('loads obj with missing mtllib', function(done) {
|
||||||
expect(loadObj(objMissingMtllibUrl, defaultOptions)
|
expect(loadObj(objMissingMtllibUrl, defaultOptions)
|
||||||
.then(function(data) {
|
.then(function(data) {
|
||||||
|
|
Loading…
Reference in New Issue