@@ -342,31 +342,54 @@ THREE.MarchingCubes = function ( resolution, material, enableUvs, enableColors )
342342
343343 // normals
344344
345- scope . normalArray [ c + 0 ] = norm [ o1 ] ;
346- scope . normalArray [ c + 1 ] = norm [ o1 + 1 ] ;
347- scope . normalArray [ c + 2 ] = norm [ o1 + 2 ] ;
345+ if ( scope . material . flatShading === true ) {
348346
349- scope . normalArray [ c + 3 ] = norm [ o2 ] ;
350- scope . normalArray [ c + 4 ] = norm [ o2 + 1 ] ;
351- scope . normalArray [ c + 5 ] = norm [ o2 + 2 ] ;
347+ var nx = ( norm [ o1 + 0 ] + norm [ o2 + 0 ] + norm [ o3 + 0 ] ) / 3 ;
348+ var ny = ( norm [ o1 + 1 ] + norm [ o2 + 1 ] + norm [ o3 + 1 ] ) / 3 ;
349+ var nz = ( norm [ o1 + 2 ] + norm [ o2 + 2 ] + norm [ o3 + 2 ] ) / 3 ;
352350
353- scope . normalArray [ c + 6 ] = norm [ o3 ] ;
354- scope . normalArray [ c + 7 ] = norm [ o3 + 1 ] ;
355- scope . normalArray [ c + 8 ] = norm [ o3 + 2 ] ;
351+ scope . normalArray [ c + 0 ] = nx ;
352+ scope . normalArray [ c + 1 ] = ny ;
353+ scope . normalArray [ c + 2 ] = nz ;
354+
355+ scope . normalArray [ c + 3 ] = nx ;
356+ scope . normalArray [ c + 4 ] = ny ;
357+ scope . normalArray [ c + 5 ] = nz ;
358+
359+ scope . normalArray [ c + 6 ] = nx ;
360+ scope . normalArray [ c + 7 ] = ny ;
361+ scope . normalArray [ c + 8 ] = nz ;
362+
363+
364+ } else {
365+
366+ scope . normalArray [ c + 0 ] = norm [ o1 + 0 ] ;
367+ scope . normalArray [ c + 1 ] = norm [ o1 + 1 ] ;
368+ scope . normalArray [ c + 2 ] = norm [ o1 + 2 ] ;
369+
370+ scope . normalArray [ c + 3 ] = norm [ o2 + 0 ] ;
371+ scope . normalArray [ c + 4 ] = norm [ o2 + 1 ] ;
372+ scope . normalArray [ c + 5 ] = norm [ o2 + 2 ] ;
373+
374+ scope . normalArray [ c + 6 ] = norm [ o3 + 0 ] ;
375+ scope . normalArray [ c + 7 ] = norm [ o3 + 1 ] ;
376+ scope . normalArray [ c + 8 ] = norm [ o3 + 2 ] ;
377+
378+ }
356379
357380 // uvs
358381
359382 if ( scope . enableUvs ) {
360383
361384 var d = scope . count * 2 ;
362385
363- scope . uvArray [ d + 0 ] = pos [ o1 ] ;
386+ scope . uvArray [ d + 0 ] = pos [ o1 + 0 ] ;
364387 scope . uvArray [ d + 1 ] = pos [ o1 + 2 ] ;
365388
366- scope . uvArray [ d + 2 ] = pos [ o2 ] ;
389+ scope . uvArray [ d + 2 ] = pos [ o2 + 0 ] ;
367390 scope . uvArray [ d + 3 ] = pos [ o2 + 2 ] ;
368391
369- scope . uvArray [ d + 4 ] = pos [ o3 ] ;
392+ scope . uvArray [ d + 4 ] = pos [ o3 + 0 ] ;
370393 scope . uvArray [ d + 5 ] = pos [ o3 + 2 ] ;
371394
372395 }
@@ -375,15 +398,15 @@ THREE.MarchingCubes = function ( resolution, material, enableUvs, enableColors )
375398
376399 if ( scope . enableColors ) {
377400
378- scope . colorArray [ c + 0 ] = pos [ o1 ] ;
401+ scope . colorArray [ c + 0 ] = pos [ o1 + 0 ] ;
379402 scope . colorArray [ c + 1 ] = pos [ o1 + 1 ] ;
380403 scope . colorArray [ c + 2 ] = pos [ o1 + 2 ] ;
381404
382- scope . colorArray [ c + 3 ] = pos [ o2 ] ;
405+ scope . colorArray [ c + 3 ] = pos [ o2 + 0 ] ;
383406 scope . colorArray [ c + 4 ] = pos [ o2 + 1 ] ;
384407 scope . colorArray [ c + 5 ] = pos [ o2 + 2 ] ;
385408
386- scope . colorArray [ c + 6 ] = pos [ o3 ] ;
409+ scope . colorArray [ c + 6 ] = pos [ o3 + 0 ] ;
387410 scope . colorArray [ c + 7 ] = pos [ o3 + 1 ] ;
388411 scope . colorArray [ c + 8 ] = pos [ o3 + 2 ] ;
389412
@@ -438,13 +461,13 @@ THREE.MarchingCubes = function ( resolution, material, enableUvs, enableColors )
438461 this . hasPositions = true ;
439462 this . hasNormals = true ;
440463
441- if ( this . enableUvs ) {
464+ if ( this . enableUvs && this . material . map ) {
442465
443466 this . hasUvs = true ;
444467
445468 }
446469
447- if ( this . enableColors ) {
470+ if ( this . enableColors && this . material . vertexColors !== THREE . NoColors ) {
448471
449472 this . hasColors = true ;
450473
0 commit comments