@@ -10,14 +10,6 @@ THREE.OBJLoader = ( function () {
10
10
var normal_pattern = / ^ v n \s + ( [ \d \. \+ \- e E ] + ) \s + ( [ \d \. \+ \- e E ] + ) \s + ( [ \d \. \+ \- e E ] + ) / ;
11
11
// vt float float
12
12
var uv_pattern = / ^ v t \s + ( [ \d \. \+ \- e E ] + ) \s + ( [ \d \. \+ \- e E ] + ) / ;
13
- // f vertex vertex vertex
14
- var face_vertex = / ^ f \s + ( - ? \d + ) \s + ( - ? \d + ) \s + ( - ? \d + ) (?: \s + ( - ? \d + ) ) ? / ;
15
- // f vertex/uv vertex/uv vertex/uv
16
- var face_vertex_uv = / ^ f \s + ( - ? \d + ) \/ ( - ? \d + ) \s + ( - ? \d + ) \/ ( - ? \d + ) \s + ( - ? \d + ) \/ ( - ? \d + ) (?: \s + ( - ? \d + ) \/ ( - ? \d + ) ) ? / ;
17
- // f vertex/uv/normal vertex/uv/normal vertex/uv/normal
18
- var face_vertex_uv_normal = / ^ f \s + ( - ? \d + ) \/ ( - ? \d + ) \/ ( - ? \d + ) \s + ( - ? \d + ) \/ ( - ? \d + ) \/ ( - ? \d + ) \s + ( - ? \d + ) \/ ( - ? \d + ) \/ ( - ? \d + ) (?: \s + ( - ? \d + ) \/ ( - ? \d + ) \/ ( - ? \d + ) ) ? / ;
19
- // f vertex//normal vertex//normal vertex//normal
20
- var face_vertex_normal = / ^ f \s + ( - ? \d + ) \/ \/ ( - ? \d + ) \s + ( - ? \d + ) \/ \/ ( - ? \d + ) \s + ( - ? \d + ) \/ \/ ( - ? \d + ) (?: \s + ( - ? \d + ) \/ \/ ( - ? \d + ) ) ? / ;
21
13
// o object_name | g group_name
22
14
var object_pattern = / ^ [ o g ] \s * ( .+ ) ? / ;
23
15
// mtllib file_reference
@@ -489,55 +481,39 @@ THREE.OBJLoader = ( function () {
489
481
490
482
} else if ( lineFirstChar === "f" ) {
491
483
492
- if ( ( result = face_vertex_uv_normal . exec ( line ) ) !== null ) {
484
+ var lineData = line . substr ( 1 ) . trim ( ) ,
485
+ vertexData = lineData . split ( ' ' ) ,
486
+ faceVertices = [ ] ;
493
487
494
- // f vertex/uv/normal vertex/uv/normal vertex/uv/normal
495
- // 0 1 2 3 4 5 6 7 8 9 10 11 12
496
- // ["f 1/1/1 2/2/2 3/3/3", "1", "1", "1", "2", "2", "2", "3", "3", "3", undefined, undefined, undefined]
488
+ // Parse the face vertex data into an easy to work with format
497
489
498
- state . addFace (
499
- result [ 1 ] , result [ 4 ] , result [ 7 ] , result [ 10 ] ,
500
- result [ 2 ] , result [ 5 ] , result [ 8 ] , result [ 11 ] ,
501
- result [ 3 ] , result [ 6 ] , result [ 9 ] , result [ 12 ]
502
- ) ;
490
+ for ( var idx = 0 ; idx < vertexData . length ; idx ++ ) {
503
491
504
- } else if ( ( result = face_vertex_uv . exec ( line ) ) !== null ) {
492
+ if ( vertexData [ idx ] . length > 0 ) {
505
493
506
- // f vertex/uv vertex/uv vertex/uv
507
- // 0 1 2 3 4 5 6 7 8
508
- // ["f 1/1 2/2 3/3", "1", "1", "2", "2", "3", "3", undefined, undefined]
494
+ var vertexParts = vertexData [ idx ] . split ( '/' ) ;
495
+ faceVertices . push ( vertexParts ) ;
509
496
510
- state . addFace (
511
- result [ 1 ] , result [ 3 ] , result [ 5 ] , result [ 7 ] ,
512
- result [ 2 ] , result [ 4 ] , result [ 6 ] , result [ 8 ]
513
- ) ;
497
+ }
514
498
515
- } else if ( ( result = face_vertex_normal . exec ( line ) ) !== null ) {
499
+ }
516
500
517
- // f vertex//normal vertex//normal vertex//normal
518
- // 0 1 2 3 4 5 6 7 8
519
- // ["f 1//1 2//2 3//3", "1", "1", "2", "2", "3", "3", undefined, undefined]
501
+ // Draw an edge between the first vertex and all subsequent vertices to form an n-gon
520
502
521
- state . addFace (
522
- result [ 1 ] , result [ 3 ] , result [ 5 ] , result [ 7 ] ,
523
- undefined , undefined , undefined , undefined ,
524
- result [ 2 ] , result [ 4 ] , result [ 6 ] , result [ 8 ]
525
- ) ;
503
+ var v1 = faceVertices [ 0 ] ,
504
+ numFaces = faceVertices . length - 1 ;
526
505
527
- } else if ( ( result = face_vertex . exec ( line ) ) !== null ) {
506
+ for ( var idx = 1 ; idx < numFaces ; idx ++ ) {
528
507
529
- // f vertex vertex vertex
530
- // 0 1 2 3 4
531
- // ["f 1 2 3", "1", "2", "3", undefined]
508
+ var v2 = faceVertices [ idx ] ,
509
+ v3 = faceVertices [ idx + 1 ] ;
532
510
533
511
state . addFace (
534
- result [ 1 ] , result [ 2 ] , result [ 3 ] , result [ 4 ]
512
+ v1 [ 0 ] , v2 [ 0 ] , v3 [ 0 ] , undefined ,
513
+ v1 [ 1 ] , v2 [ 1 ] , v3 [ 1 ] , undefined ,
514
+ v1 [ 2 ] , v2 [ 2 ] , v3 [ 2 ] , undefined
535
515
) ;
536
516
537
- } else {
538
-
539
- throw new Error ( "Unexpected face line: '" + line + "'" ) ;
540
-
541
517
}
542
518
543
519
} else if ( lineFirstChar === "l" ) {
0 commit comments