From c898be26e682ee379b11c7e6059232030fafb907 Mon Sep 17 00:00:00 2001 From: "Mr.doob" Date: Fri, 3 Jan 2020 14:39:34 +0100 Subject: [PATCH] OBJLoader: Avoid creating duplicate materials. --- examples/js/loaders/OBJLoader.js | 13 ++++++++----- examples/jsm/loaders/OBJLoader.js | 13 ++++++++----- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/examples/js/loaders/OBJLoader.js b/examples/js/loaders/OBJLoader.js index 06ba927c29..326d2a888c 100644 --- a/examples/js/loaders/OBJLoader.js +++ b/examples/js/loaders/OBJLoader.js @@ -24,6 +24,7 @@ THREE.OBJLoader = ( function () { colors: [], uvs: [], + materials: {}, materialLibraries: [], startObject: function ( name, fromDeclaration ) { @@ -679,7 +680,8 @@ THREE.OBJLoader = ( function () { for ( var mi = 0, miLen = materials.length; mi < miLen; mi ++ ) { var sourceMaterial = materials[ mi ]; - var material = undefined; + var materialHash = sourceMaterial.name + '_' + sourceMaterial.smooth + '_' + hasVertexColors; + var material = state.materials[ materialHash ]; if ( this.materials !== null ) { @@ -705,7 +707,7 @@ THREE.OBJLoader = ( function () { } - if ( ! material ) { + if ( material === undefined ) { if ( isLine ) { @@ -722,11 +724,12 @@ THREE.OBJLoader = ( function () { } material.name = sourceMaterial.name; + material.flatShading = sourceMaterial.smooth ? false : true; + material.vertexColors = hasVertexColors ? THREE.VertexColors : THREE.NoColors; - } + state.materials[ materialHash ] = material; - material.flatShading = sourceMaterial.smooth ? false : true; - material.vertexColors = hasVertexColors ? THREE.VertexColors : THREE.NoColors; + } createdMaterials.push( material ); diff --git a/examples/jsm/loaders/OBJLoader.js b/examples/jsm/loaders/OBJLoader.js index 40dfc262e1..b6bdf72e33 100644 --- a/examples/jsm/loaders/OBJLoader.js +++ b/examples/jsm/loaders/OBJLoader.js @@ -41,6 +41,7 @@ var OBJLoader = ( function () { colors: [], uvs: [], + materials: {}, materialLibraries: [], startObject: function ( name, fromDeclaration ) { @@ -696,7 +697,8 @@ var OBJLoader = ( function () { for ( var mi = 0, miLen = materials.length; mi < miLen; mi ++ ) { var sourceMaterial = materials[ mi ]; - var material = undefined; + var materialHash = sourceMaterial.name + '_' + sourceMaterial.smooth + '_' + hasVertexColors; + var material = state.materials[ materialHash ]; if ( this.materials !== null ) { @@ -722,7 +724,7 @@ var OBJLoader = ( function () { } - if ( ! material ) { + if ( material === undefined ) { if ( isLine ) { @@ -739,11 +741,12 @@ var OBJLoader = ( function () { } material.name = sourceMaterial.name; + material.flatShading = sourceMaterial.smooth ? false : true; + material.vertexColors = hasVertexColors ? VertexColors : NoColors; - } + state.materials[ materialHash ] = material; - material.flatShading = sourceMaterial.smooth ? false : true; - material.vertexColors = hasVertexColors ? VertexColors : NoColors; + } createdMaterials.push( material ); -- GitLab