diff --git a/examples/js/loaders/OBJLoader.js b/examples/js/loaders/OBJLoader.js index 15ff6124aaa3f021e4f9f78888dc281e7daf5d2c..cc4edae69cbe9ecebab3e3b7fbfdb0c0aa25af2e 100644 --- a/examples/js/loaders/OBJLoader.js +++ b/examples/js/loaders/OBJLoader.js @@ -32,6 +32,12 @@ THREE.OBJLoader.prototype = { data = data.replace( /\ \\\r\n/g, '' ); // rhino adds ' \\r\n' some times. + var replacement = '/f$1$2$4\n/f$2$3$4'; // quads to tris + data = data.replace( /f( +\d+)( +\d+)( +\d+)( +\d+)/g, replacement ); + data = data.replace( /f( +\d+\/\d+)( +\d+\/\d+)( +\d+\/\d+)( +\d+\/\d+)/g, replacement ); + data = data.replace( /f( +\d+\/\d+\/\d+)( +\d+\/\d+\/\d+)( +\d+\/\d+\/\d+)( +\d+\/\d+\/\d+)/g, replacement ); + data = data.replace( /f( +\d+\/\/\d+)( +\d+\/\/\d+)( +\d+\/\/\d+)( +\d+\/\/\d+)/g, replacement ); + // function vector( x, y, z ) { @@ -52,12 +58,6 @@ THREE.OBJLoader.prototype = { } - function face4( a, b, c, d, normals ) { - - return new THREE.Face4( a, b, c, d, normals ); - - } - function meshN( meshName, materialName ) { if ( geometry.vertices.length > 0 ) { @@ -112,21 +112,21 @@ THREE.OBJLoader.prototype = { var uv_pattern = /vt( +[\d|\.|\+|\-|e]+)( +[\d|\.|\+|\-|e]+)/ - // f vertex vertex vertex ... + // f vertex vertex vertex - var face_pattern1 = /f( +\d+)( +\d+)( +\d+)( +\d+)?/ + var face_pattern1 = /f( +\d+)( +\d+)( +\d+)/ - // f vertex/uv vertex/uv vertex/uv ... + // f vertex/uv vertex/uv vertex/uv - var face_pattern2 = /f( +(\d+)\/(\d+))( +(\d+)\/(\d+))( +(\d+)\/(\d+))( +(\d+)\/(\d+))?/; + var face_pattern2 = /f( +(\d+)\/(\d+))( +(\d+)\/(\d+))( +(\d+)\/(\d+))/; - // f vertex/uv/normal vertex/uv/normal vertex/uv/normal ... + // f vertex/uv/normal vertex/uv/normal vertex/uv/normal - var face_pattern3 = /f( +(\d+)\/(\d+)\/(\d+))( +(\d+)\/(\d+)\/(\d+))( +(\d+)\/(\d+)\/(\d+))( +(\d+)\/(\d+)\/(\d+))?/; + var face_pattern3 = /f( +(\d+)\/(\d+)\/(\d+))( +(\d+)\/(\d+)\/(\d+))( +(\d+)\/(\d+)\/(\d+))/; - // f vertex//normal vertex//normal vertex//normal ... + // f vertex//normal vertex//normal vertex//normal - var face_pattern4 = /f( +(\d+)\/\/(\d+))( +(\d+)\/\/(\d+))( +(\d+)\/\/(\d+))( +(\d+)\/\/(\d+))?/; + var face_pattern4 = /f( +(\d+)\/\/(\d+))( +(\d+)\/\/(\d+))( +(\d+)\/\/(\d+))/; // @@ -174,195 +174,89 @@ THREE.OBJLoader.prototype = { } else if ( ( result = face_pattern1.exec( line ) ) !== null ) { - // ["f 1 2 3", "1", "2", "3", undefined] - - if ( result[ 4 ] === undefined ) { - - geometry.vertices.push( - vertices[ parseInt( result[ 1 ] ) - 1 ], - vertices[ parseInt( result[ 2 ] ) - 1 ], - vertices[ parseInt( result[ 3 ] ) - 1 ] - ); + // ["f 1 2 3", "1", "2", "3"] - geometry.faces.push( face3( - verticesCount ++, - verticesCount ++, - verticesCount ++ - ) ); + geometry.vertices.push( + vertices[ parseInt( result[ 1 ] ) - 1 ], + vertices[ parseInt( result[ 2 ] ) - 1 ], + vertices[ parseInt( result[ 3 ] ) - 1 ] + ); - } else { + geometry.faces.push( face3( + verticesCount ++, + verticesCount ++, + verticesCount ++ + ) ); - geometry.vertices.push( - vertices[ parseInt( result[ 1 ] ) - 1 ], - vertices[ parseInt( result[ 2 ] ) - 1 ], - vertices[ parseInt( result[ 3 ] ) - 1 ], - vertices[ parseInt( result[ 4 ] ) - 1 ] - ); + } else if ( ( result = face_pattern2.exec( line ) ) !== null ) { - geometry.faces.push( face4( - verticesCount ++, - verticesCount ++, - verticesCount ++, - verticesCount ++ - ) ); + // ["f 1/1 2/2 3/3", " 1/1", "1", "1", " 2/2", "2", "2", " 3/3", "3", "3"] - } + geometry.vertices.push( + vertices[ parseInt( result[ 2 ] ) - 1 ], + vertices[ parseInt( result[ 5 ] ) - 1 ], + vertices[ parseInt( result[ 8 ] ) - 1 ] + ); - } else if ( ( result = face_pattern2.exec( line ) ) !== null ) { + geometry.faces.push( face3( + verticesCount ++, + verticesCount ++, + verticesCount ++ + ) ); - // ["f 1/1 2/2 3/3", " 1/1", "1", "1", " 2/2", "2", "2", " 3/3", "3", "3", undefined, undefined, undefined] - - if ( result[ 10 ] === undefined ) { - - geometry.vertices.push( - vertices[ parseInt( result[ 2 ] ) - 1 ], - vertices[ parseInt( result[ 5 ] ) - 1 ], - vertices[ parseInt( result[ 8 ] ) - 1 ] - ); - - geometry.faces.push( face3( - verticesCount ++, - verticesCount ++, - verticesCount ++ - ) ); - - geometry.faceVertexUvs[ 0 ].push( [ - uvs[ parseInt( result[ 3 ] ) - 1 ], - uvs[ parseInt( result[ 6 ] ) - 1 ], - uvs[ parseInt( result[ 9 ] ) - 1 ] - ] ); - - } else { - - geometry.vertices.push( - vertices[ parseInt( result[ 2 ] ) - 1 ], - vertices[ parseInt( result[ 5 ] ) - 1 ], - vertices[ parseInt( result[ 8 ] ) - 1 ], - vertices[ parseInt( result[ 11 ] ) - 1 ] - ); - - geometry.faces.push( face4( - verticesCount ++, - verticesCount ++, - verticesCount ++, - verticesCount ++ - ) ); - - geometry.faceVertexUvs[ 0 ].push( [ - uvs[ parseInt( result[ 3 ] ) - 1 ], - uvs[ parseInt( result[ 6 ] ) - 1 ], - uvs[ parseInt( result[ 9 ] ) - 1 ], - uvs[ parseInt( result[ 12 ] ) - 1 ] - ] ); - - } + geometry.faceVertexUvs[ 0 ].push( [ + uvs[ parseInt( result[ 3 ] ) - 1 ], + uvs[ parseInt( result[ 6 ] ) - 1 ], + uvs[ parseInt( result[ 9 ] ) - 1 ] + ] ); } else if ( ( result = face_pattern3.exec( line ) ) !== null ) { - // ["f 1/1/1 2/2/2 3/3/3", " 1/1/1", "1", "1", "1", " 2/2/2", "2", "2", "2", " 3/3/3", "3", "3", "3", undefined, undefined, undefined, undefined] - - if ( result[ 13 ] === undefined ) { - - geometry.vertices.push( - vertices[ parseInt( result[ 2 ] ) - 1 ], - vertices[ parseInt( result[ 6 ] ) - 1 ], - vertices[ parseInt( result[ 10 ] ) - 1 ] - ); - - geometry.faces.push( face3( - verticesCount ++, - verticesCount ++, - verticesCount ++, - [ - normals[ parseInt( result[ 4 ] ) - 1 ], - normals[ parseInt( result[ 8 ] ) - 1 ], - normals[ parseInt( result[ 12 ] ) - 1 ] - ] - ) ); - - geometry.faceVertexUvs[ 0 ].push( [ - uvs[ parseInt( result[ 3 ] ) - 1 ], - uvs[ parseInt( result[ 7 ] ) - 1 ], - uvs[ parseInt( result[ 11 ] ) - 1 ] - ] ); - - } else { - - geometry.vertices.push( - vertices[ parseInt( result[ 2 ] ) - 1 ], - vertices[ parseInt( result[ 6 ] ) - 1 ], - vertices[ parseInt( result[ 10 ] ) - 1 ], - vertices[ parseInt( result[ 14 ] ) - 1 ] - ); - - geometry.faces.push( face4( - verticesCount ++, - verticesCount ++, - verticesCount ++, - verticesCount ++, - [ - normals[ parseInt( result[ 4 ] ) - 1 ], - normals[ parseInt( result[ 8 ] ) - 1 ], - normals[ parseInt( result[ 12 ] ) - 1 ], - normals[ parseInt( result[ 16 ] ) - 1 ] - ] - ) ); - - geometry.faceVertexUvs[ 0 ].push( [ - uvs[ parseInt( result[ 3 ] ) - 1 ], - uvs[ parseInt( result[ 7 ] ) - 1 ], - uvs[ parseInt( result[ 11 ] ) - 1 ], - uvs[ parseInt( result[ 15 ] ) - 1 ] - ] ); - - } + // ["f 1/1/1 2/2/2 3/3/3", " 1/1/1", "1", "1", "1", " 2/2/2", "2", "2", "2", " 3/3/3", "3", "3", "3"] + + geometry.vertices.push( + vertices[ parseInt( result[ 2 ] ) - 1 ], + vertices[ parseInt( result[ 6 ] ) - 1 ], + vertices[ parseInt( result[ 10 ] ) - 1 ] + ); + + geometry.faces.push( face3( + verticesCount ++, + verticesCount ++, + verticesCount ++, + [ + normals[ parseInt( result[ 4 ] ) - 1 ], + normals[ parseInt( result[ 8 ] ) - 1 ], + normals[ parseInt( result[ 12 ] ) - 1 ] + ] + ) ); + + geometry.faceVertexUvs[ 0 ].push( [ + uvs[ parseInt( result[ 3 ] ) - 1 ], + uvs[ parseInt( result[ 7 ] ) - 1 ], + uvs[ parseInt( result[ 11 ] ) - 1 ] + ] ); } else if ( ( result = face_pattern4.exec( line ) ) !== null ) { - // ["f 1//1 2//2 3//3", " 1//1", "1", "1", " 2//2", "2", "2", " 3//3", "3", "3", undefined, undefined, undefined] - - if ( result[ 10 ] === undefined ) { - - geometry.vertices.push( - vertices[ parseInt( result[ 2 ] ) - 1 ], - vertices[ parseInt( result[ 5 ] ) - 1 ], - vertices[ parseInt( result[ 8 ] ) - 1 ] - ); - - geometry.faces.push( face3( - verticesCount ++, - verticesCount ++, - verticesCount ++, - [ - normals[ parseInt( result[ 3 ] ) - 1 ], - normals[ parseInt( result[ 6 ] ) - 1 ], - normals[ parseInt( result[ 9 ] ) - 1 ] - ] - ) ); - - } else { - - geometry.vertices.push( - vertices[ parseInt( result[ 2 ] ) - 1 ], - vertices[ parseInt( result[ 5 ] ) - 1 ], - vertices[ parseInt( result[ 8 ] ) - 1 ], - vertices[ parseInt( result[ 11 ] ) - 1 ] - ); - - geometry.faces.push( face4( - verticesCount ++, - verticesCount ++, - verticesCount ++, - verticesCount ++, - [ - normals[ parseInt( result[ 3 ] ) - 1 ], - normals[ parseInt( result[ 6 ] ) - 1 ], - normals[ parseInt( result[ 9 ] ) - 1 ], - normals[ parseInt( result[ 12 ] ) - 1 ] - ] - ) ); - - } + // ["f 1//1 2//2 3//3", " 1//1", "1", "1", " 2//2", "2", "2", " 3//3", "3", "3"] + + geometry.vertices.push( + vertices[ parseInt( result[ 2 ] ) - 1 ], + vertices[ parseInt( result[ 5 ] ) - 1 ], + vertices[ parseInt( result[ 8 ] ) - 1 ] + ); + + geometry.faces.push( face3( + verticesCount ++, + verticesCount ++, + verticesCount ++, + [ + normals[ parseInt( result[ 3 ] ) - 1 ], + normals[ parseInt( result[ 6 ] ) - 1 ], + normals[ parseInt( result[ 9 ] ) - 1 ] + ] + ) ); } else if ( /^o /.test( line ) ) { diff --git a/examples/js/loaders/OBJMTLLoader.js b/examples/js/loaders/OBJMTLLoader.js index 1afbb923b3c532d91acfa491e1868eb816e0a7a0..a585c53e77b04a3c19dc5d5d42ab2b6d46da1682 100644 --- a/examples/js/loaders/OBJMTLLoader.js +++ b/examples/js/loaders/OBJMTLLoader.js @@ -180,6 +180,12 @@ THREE.OBJMTLLoader.prototype = { data = data.replace( /\ \\\r\n/g, '' ); // rhino adds ' \\r\n' some times. + var replacement = '/f$1$2$4\n/f$2$3$4'; // quads to tris + data = data.replace( /f( +\d+)( +\d+)( +\d+)( +\d+)/g, replacement ); + data = data.replace( /f( +\d+\/\d+)( +\d+\/\d+)( +\d+\/\d+)( +\d+\/\d+)/g, replacement ); + data = data.replace( /f( +\d+\/\d+\/\d+)( +\d+\/\d+\/\d+)( +\d+\/\d+\/\d+)( +\d+\/\d+\/\d+)/g, replacement ); + data = data.replace( /f( +\d+\/\/\d+)( +\d+\/\/\d+)( +\d+\/\/\d+)( +\d+\/\/\d+)/g, replacement ); + // function vector( x, y, z ) { @@ -200,12 +206,6 @@ THREE.OBJMTLLoader.prototype = { } - function face4( a, b, c, d, normals ) { - - return new THREE.Face4( a, b, c, d, normals ); - - } - function meshN( meshName, materialName ) { if ( geometry.vertices.length > 0 ) { @@ -260,21 +260,21 @@ THREE.OBJMTLLoader.prototype = { var uv_pattern = /vt( +[\d|\.|\+|\-|e]+)( +[\d|\.|\+|\-|e]+)/ - // f vertex vertex vertex ... + // f vertex vertex vertex - var face_pattern1 = /f( +\d+)( +\d+)( +\d+)( +\d+)?/ + var face_pattern1 = /f( +\d+)( +\d+)( +\d+)/ - // f vertex/uv vertex/uv vertex/uv ... + // f vertex/uv vertex/uv vertex/uv - var face_pattern2 = /f( +(\d+)\/(\d+))( +(\d+)\/(\d+))( +(\d+)\/(\d+))( +(\d+)\/(\d+))?/; + var face_pattern2 = /f( +(\d+)\/(\d+))( +(\d+)\/(\d+))( +(\d+)\/(\d+))/; - // f vertex/uv/normal vertex/uv/normal vertex/uv/normal ... + // f vertex/uv/normal vertex/uv/normal vertex/uv/normal - var face_pattern3 = /f( +(\d+)\/(\d+)\/(\d+))( +(\d+)\/(\d+)\/(\d+))( +(\d+)\/(\d+)\/(\d+))( +(\d+)\/(\d+)\/(\d+))?/; + var face_pattern3 = /f( +(\d+)\/(\d+)\/(\d+))( +(\d+)\/(\d+)\/(\d+))( +(\d+)\/(\d+)\/(\d+))/; - // f vertex//normal vertex//normal vertex//normal ... + // f vertex//normal vertex//normal vertex//normal - var face_pattern4 = /f( +(\d+)\/\/(\d+))( +(\d+)\/\/(\d+))( +(\d+)\/\/(\d+))( +(\d+)\/\/(\d+))?/; + var face_pattern4 = /f( +(\d+)\/\/(\d+))( +(\d+)\/\/(\d+))( +(\d+)\/\/(\d+))/; // @@ -285,8 +285,6 @@ THREE.OBJMTLLoader.prototype = { var line = lines[ i ]; line = line.trim(); - // temporary variable storing pattern matching result - var result; if ( line.length === 0 || line.charAt( 0 ) === '#' ) { @@ -324,195 +322,89 @@ THREE.OBJMTLLoader.prototype = { } else if ( ( result = face_pattern1.exec( line ) ) !== null ) { - // ["f 1 2 3", "1", "2", "3", undefined] - - if ( result[ 4 ] === undefined ) { - - geometry.vertices.push( - vertices[ parseInt( result[ 1 ] ) - 1 ], - vertices[ parseInt( result[ 2 ] ) - 1 ], - vertices[ parseInt( result[ 3 ] ) - 1 ] - ); - - geometry.faces.push( face3( - verticesCount ++, - verticesCount ++, - verticesCount ++ - ) ); + // ["f 1 2 3", "1", "2", "3"] - } else { - - geometry.vertices.push( - vertices[ parseInt( result[ 1 ] ) - 1 ], - vertices[ parseInt( result[ 2 ] ) - 1 ], - vertices[ parseInt( result[ 3 ] ) - 1 ], - vertices[ parseInt( result[ 4 ] ) - 1 ] - ); - - geometry.faces.push( face4( - verticesCount ++, - verticesCount ++, - verticesCount ++, - verticesCount ++ - ) ); + geometry.vertices.push( + vertices[ parseInt( result[ 1 ] ) - 1 ], + vertices[ parseInt( result[ 2 ] ) - 1 ], + vertices[ parseInt( result[ 3 ] ) - 1 ] + ); - } + geometry.faces.push( face3( + verticesCount ++, + verticesCount ++, + verticesCount ++ + ) ); } else if ( ( result = face_pattern2.exec( line ) ) !== null ) { - // ["f 1/1 2/2 3/3", " 1/1", "1", "1", " 2/2", "2", "2", " 3/3", "3", "3", undefined, undefined, undefined] + // ["f 1/1 2/2 3/3", " 1/1", "1", "1", " 2/2", "2", "2", " 3/3", "3", "3"] - if ( result[ 10 ] === undefined ) { + geometry.vertices.push( + vertices[ parseInt( result[ 2 ] ) - 1 ], + vertices[ parseInt( result[ 5 ] ) - 1 ], + vertices[ parseInt( result[ 8 ] ) - 1 ] + ); - geometry.vertices.push( - vertices[ parseInt( result[ 2 ] ) - 1 ], - vertices[ parseInt( result[ 5 ] ) - 1 ], - vertices[ parseInt( result[ 8 ] ) - 1 ] - ); - - geometry.faces.push( face3( - verticesCount ++, - verticesCount ++, - verticesCount ++ - ) ); - - geometry.faceVertexUvs[ 0 ].push( [ - uvs[ parseInt( result[ 3 ] ) - 1 ], - uvs[ parseInt( result[ 6 ] ) - 1 ], - uvs[ parseInt( result[ 9 ] ) - 1 ] - ] ); - - } else { - - geometry.vertices.push( - vertices[ parseInt( result[ 2 ] ) - 1 ], - vertices[ parseInt( result[ 5 ] ) - 1 ], - vertices[ parseInt( result[ 8 ] ) - 1 ], - vertices[ parseInt( result[ 11 ] ) - 1 ] - ); - - geometry.faces.push( face4( - verticesCount ++, - verticesCount ++, - verticesCount ++, - verticesCount ++ - ) ); - - geometry.faceVertexUvs[ 0 ].push( [ - uvs[ parseInt( result[ 3 ] ) - 1 ], - uvs[ parseInt( result[ 6 ] ) - 1 ], - uvs[ parseInt( result[ 9 ] ) - 1 ], - uvs[ parseInt( result[ 12 ] ) - 1 ] - ] ); + geometry.faces.push( face3( + verticesCount ++, + verticesCount ++, + verticesCount ++ + ) ); - } + geometry.faceVertexUvs[ 0 ].push( [ + uvs[ parseInt( result[ 3 ] ) - 1 ], + uvs[ parseInt( result[ 6 ] ) - 1 ], + uvs[ parseInt( result[ 9 ] ) - 1 ] + ] ); } else if ( ( result = face_pattern3.exec( line ) ) !== null ) { - // ["f 1/1/1 2/2/2 3/3/3", " 1/1/1", "1", "1", "1", " 2/2/2", "2", "2", "2", " 3/3/3", "3", "3", "3", undefined, undefined, undefined, undefined] - - if ( result[ 13 ] === undefined ) { - - geometry.vertices.push( - vertices[ parseInt( result[ 2 ] ) - 1 ], - vertices[ parseInt( result[ 6 ] ) - 1 ], - vertices[ parseInt( result[ 10 ] ) - 1 ] - ); - - geometry.faces.push( face3( - verticesCount ++, - verticesCount ++, - verticesCount ++, - [ - normals[ parseInt( result[ 4 ] ) - 1 ], - normals[ parseInt( result[ 8 ] ) - 1 ], - normals[ parseInt( result[ 12 ] ) - 1 ] - ] - ) ); - - geometry.faceVertexUvs[ 0 ].push( [ - uvs[ parseInt( result[ 3 ] ) - 1 ], - uvs[ parseInt( result[ 7 ] ) - 1 ], - uvs[ parseInt( result[ 11 ] ) - 1 ] - ] ); - - } else { - - geometry.vertices.push( - vertices[ parseInt( result[ 2 ] ) - 1 ], - vertices[ parseInt( result[ 6 ] ) - 1 ], - vertices[ parseInt( result[ 10 ] ) - 1 ], - vertices[ parseInt( result[ 14 ] ) - 1 ] - ); - - geometry.faces.push( face4( - verticesCount ++, - verticesCount ++, - verticesCount ++, - verticesCount ++, - [ - normals[ parseInt( result[ 4 ] ) - 1 ], - normals[ parseInt( result[ 8 ] ) - 1 ], - normals[ parseInt( result[ 12 ] ) - 1 ], - normals[ parseInt( result[ 16 ] ) - 1 ] - ] - ) ); - - geometry.faceVertexUvs[ 0 ].push( [ - uvs[ parseInt( result[ 3 ] ) - 1 ], - uvs[ parseInt( result[ 7 ] ) - 1 ], - uvs[ parseInt( result[ 11 ] ) - 1 ], - uvs[ parseInt( result[ 15 ] ) - 1 ] - ] ); + // ["f 1/1/1 2/2/2 3/3/3", " 1/1/1", "1", "1", "1", " 2/2/2", "2", "2", "2", " 3/3/3", "3", "3", "3"] + + geometry.vertices.push( + vertices[ parseInt( result[ 2 ] ) - 1 ], + vertices[ parseInt( result[ 6 ] ) - 1 ], + vertices[ parseInt( result[ 10 ] ) - 1 ] + ); + + geometry.faces.push( face3( + verticesCount ++, + verticesCount ++, + verticesCount ++, + [ + normals[ parseInt( result[ 4 ] ) - 1 ], + normals[ parseInt( result[ 8 ] ) - 1 ], + normals[ parseInt( result[ 12 ] ) - 1 ] + ] + ) ); - } + geometry.faceVertexUvs[ 0 ].push( [ + uvs[ parseInt( result[ 3 ] ) - 1 ], + uvs[ parseInt( result[ 7 ] ) - 1 ], + uvs[ parseInt( result[ 11 ] ) - 1 ] + ] ); } else if ( ( result = face_pattern4.exec( line ) ) !== null ) { - // ["f 1//1 2//2 3//3", " 1//1", "1", "1", " 2//2", "2", "2", " 3//3", "3", "3", undefined, undefined, undefined] - - if ( result[ 10 ] === undefined ) { - - geometry.vertices.push( - vertices[ parseInt( result[ 2 ] ) - 1 ], - vertices[ parseInt( result[ 5 ] ) - 1 ], - vertices[ parseInt( result[ 8 ] ) - 1 ] - ); - - geometry.faces.push( face3( - verticesCount ++, - verticesCount ++, - verticesCount ++, - [ - normals[ parseInt( result[ 3 ] ) - 1 ], - normals[ parseInt( result[ 6 ] ) - 1 ], - normals[ parseInt( result[ 9 ] ) - 1 ] - ] - ) ); - - } else { - - geometry.vertices.push( - vertices[ parseInt( result[ 2 ] ) - 1 ], - vertices[ parseInt( result[ 5 ] ) - 1 ], - vertices[ parseInt( result[ 8 ] ) - 1 ], - vertices[ parseInt( result[ 11 ] ) - 1 ] - ); - - geometry.faces.push( face4( - verticesCount ++, - verticesCount ++, - verticesCount ++, - verticesCount ++, - [ - normals[ parseInt( result[ 3 ] ) - 1 ], - normals[ parseInt( result[ 6 ] ) - 1 ], - normals[ parseInt( result[ 9 ] ) - 1 ], - normals[ parseInt( result[ 12 ] ) - 1 ] - ] - ) ); - - } + // ["f 1//1 2//2 3//3", " 1//1", "1", "1", " 2//2", "2", "2", " 3//3", "3", "3"] + + geometry.vertices.push( + vertices[ parseInt( result[ 2 ] ) - 1 ], + vertices[ parseInt( result[ 5 ] ) - 1 ], + vertices[ parseInt( result[ 8 ] ) - 1 ] + ); + + geometry.faces.push( face3( + verticesCount ++, + verticesCount ++, + verticesCount ++, + [ + normals[ parseInt( result[ 3 ] ) - 1 ], + normals[ parseInt( result[ 6 ] ) - 1 ], + normals[ parseInt( result[ 9 ] ) - 1 ] + ] + ) ); } else if ( /^o /.test( line ) ) {