Better usemtl handling

This commit is contained in:
Sean Lilley 2017-12-28 16:16:26 -05:00
parent 1bebb590ef
commit 400dc3227b
2 changed files with 15 additions and 2 deletions

View File

@ -1,6 +1,10 @@
Change Log Change Log
========== ==========
### 2.2.0 ???
* Fixed handling of `usemtl` when appearing before an `o` or `g` token. [#121](https://github.com/AnalyticalGraphicsInc/obj2gltf/pull/121)
### 2.1.0 2017-12-28 ### 2.1.0 2017-12-28
* Fixed loading faces that contain less than 3 vertices. [#120](https://github.com/AnalyticalGraphicsInc/obj2gltf/pull/120) * Fixed loading faces that contain less than 3 vertices. [#120](https://github.com/AnalyticalGraphicsInc/obj2gltf/pull/120)

View File

@ -71,6 +71,7 @@ function loadObj(objPath, options) {
var node; var node;
var mesh; var mesh;
var primitive; var primitive;
var activeMaterial;
// All nodes seen in the obj // All nodes seen in the obj
var nodes = []; var nodes = [];
@ -120,12 +121,15 @@ function loadObj(objPath, options) {
function addPrimitive() { function addPrimitive() {
primitive = new Primitive(); primitive = new Primitive();
primitive.material = activeMaterial;
mesh.primitives.push(primitive); mesh.primitives.push(primitive);
} }
function useMaterial(name) { function useMaterial(name) {
// Look to see if this material has already been used by a primitive in the mesh
var material = getName(name); var material = getName(name);
activeMaterial = material;
// Look to see if this material has already been used by a primitive in the mesh
var primitives = mesh.primitives; var primitives = mesh.primitives;
var primitivesLength = primitives.length; var primitivesLength = primitives.length;
for (var i = 0; i < primitivesLength; ++i) { for (var i = 0; i < primitivesLength; ++i) {
@ -136,7 +140,6 @@ function loadObj(objPath, options) {
} }
// Add a new primitive with this material // Add a new primitive with this material
addPrimitive(); addPrimitive();
primitive.material = getName(name);
} }
function getOffset(a, attributeData, components) { function getOffset(a, attributeData, components) {
@ -533,6 +536,12 @@ function finishLoading(nodes, mtlPaths, objPath, options) {
function loadMtls(mtlPaths, objPath, options) { function loadMtls(mtlPaths, objPath, options) {
var objDirectory = path.dirname(objPath); var objDirectory = path.dirname(objPath);
var materials = []; var materials = [];
// Remove duplicates
mtlPaths = mtlPaths.filter(function(value, index, self) {
return self.indexOf(value) === index;
});
return Promise.map(mtlPaths, function(mtlPath) { return Promise.map(mtlPaths, function(mtlPath) {
mtlPath = path.resolve(objDirectory, mtlPath); mtlPath = path.resolve(objDirectory, mtlPath);
var shallowPath = path.resolve(path.join(objDirectory, path.basename(mtlPath))); var shallowPath = path.resolve(path.join(objDirectory, path.basename(mtlPath)));