@@ -426,8 +426,21 @@ function scalePoint(pt, vec, size) {
426
426
* @param {Number } c - Third index
427
427
* @param {Array } verticesArray - The output vertices array
428
428
* @param {Array } uvArray - The output UV array
429
+ * @param {Array } colorArray - The output color array
430
+ * @param {Array } color - The color [r, g, b]
431
+ * @param {Boolean } perFaceUV - Flag for per-face UV mapping
432
+ * @param {Number } faceIndex - Index of the face for UV mapping
429
433
*/
430
- function addTriangle ( layers , a , b , c , verticesArray , uvArray ) {
434
+ function addTriangle (
435
+ layers ,
436
+ a ,
437
+ b ,
438
+ c ,
439
+ verticesArray ,
440
+ uvArray ,
441
+ colorArray ,
442
+ color
443
+ ) {
431
444
const tri = [ a , c , b ] ;
432
445
tri . forEach ( ( i ) => {
433
446
verticesArray . push ( layers [ i * 3 ] , layers [ i * 3 + 1 ] , layers [ i * 3 + 2 ] ) ;
@@ -445,6 +458,9 @@ function addTriangle(layers, a, b, c, verticesArray, uvArray) {
445
458
uvs . forEach ( ( uv ) => {
446
459
uvArray . push ( uv [ 0 ] , uv [ 1 ] ) ;
447
460
} ) ;
461
+ if ( colorArray && color ) {
462
+ for ( let i = 0 ; i < 3 ; ++ i ) colorArray . push ( color [ 0 ] , color [ 1 ] , color [ 2 ] ) ;
463
+ }
448
464
}
449
465
450
466
/**
@@ -456,8 +472,20 @@ function addTriangle(layers, a, b, c, verticesArray, uvArray) {
456
472
* @param {Number } d - Fourth index
457
473
* @param {Array } verticesArray - The output vertices array
458
474
* @param {Array } uvArray - The output UV array
475
+ * @param {Array } colorArray - The output color array
476
+ * @param {Array } color - The color [r, g, b]
459
477
*/
460
- function addQuad ( layers , a , b , c , d , verticesArray , uvArray ) {
478
+ function addQuad (
479
+ layers ,
480
+ a ,
481
+ b ,
482
+ c ,
483
+ d ,
484
+ verticesArray ,
485
+ uvArray ,
486
+ colorArray ,
487
+ color
488
+ ) {
461
489
const quad = [ a , d , b , b , d , c ] ;
462
490
quad . forEach ( ( i ) =>
463
491
verticesArray . push ( layers [ i * 3 ] , layers [ i * 3 + 1 ] , layers [ i * 3 + 2 ] )
@@ -482,6 +510,10 @@ function addQuad(layers, a, b, c, d, verticesArray, uvArray) {
482
510
uvArray . push ( uvs [ 1 ] [ 0 ] , uvs [ 1 ] [ 1 ] ) ;
483
511
uvArray . push ( uvs [ 2 ] [ 0 ] , uvs [ 2 ] [ 1 ] ) ;
484
512
uvArray . push ( uvs [ 3 ] [ 0 ] , uvs [ 3 ] [ 1 ] ) ;
513
+
514
+ if ( colorArray && color ) {
515
+ for ( let i = 0 ; i < 6 ; ++ i ) colorArray . push ( color [ 0 ] , color [ 1 ] , color [ 2 ] ) ;
516
+ }
485
517
}
486
518
487
519
/**
@@ -503,7 +535,9 @@ function buildLidFaces(
503
535
bevelEnabled ,
504
536
bevelSegments ,
505
537
verticesArray ,
506
- uvArray
538
+ uvArray ,
539
+ colorArray ,
540
+ color
507
541
) {
508
542
if ( bevelEnabled ) {
509
543
let layer = 0 ;
@@ -515,7 +549,9 @@ function buildLidFaces(
515
549
b + offset ,
516
550
a + offset ,
517
551
verticesArray ,
518
- uvArray
552
+ uvArray ,
553
+ colorArray ,
554
+ color
519
555
) ;
520
556
} ) ;
521
557
@@ -530,13 +566,15 @@ function buildLidFaces(
530
566
b + offset ,
531
567
c + offset ,
532
568
verticesArray ,
533
- uvArray
569
+ uvArray ,
570
+ colorArray ,
571
+ color
534
572
) ;
535
573
} ) ;
536
574
} else {
537
575
// Bottom faces
538
576
faces . forEach ( ( [ a , b , c ] ) => {
539
- addTriangle ( layers , c , b , a , verticesArray , uvArray ) ;
577
+ addTriangle ( layers , c , b , a , verticesArray , uvArray , colorArray , color ) ;
540
578
} ) ;
541
579
542
580
// Top faces
@@ -548,7 +586,9 @@ function buildLidFaces(
548
586
b + offset ,
549
587
c + offset ,
550
588
verticesArray ,
551
- uvArray
589
+ uvArray ,
590
+ colorArray ,
591
+ color
552
592
) ;
553
593
} ) ;
554
594
}
@@ -573,7 +613,9 @@ function buildWalls(
573
613
steps ,
574
614
bevelSegments ,
575
615
verticesArray ,
576
- uvArray
616
+ uvArray ,
617
+ colorArray ,
618
+ color
577
619
) {
578
620
const totalLayers = steps + bevelSegments * 2 ;
579
621
for ( let i = 0 ; i < contour . length ; i ++ ) {
@@ -589,7 +631,7 @@ function buildWalls(
589
631
const c = layerOffset + k + slen2 ;
590
632
const d = layerOffset + j + slen2 ;
591
633
592
- addQuad ( layers , a , b , c , d , verticesArray , uvArray ) ;
634
+ addQuad ( layers , a , b , c , d , verticesArray , uvArray , colorArray , color ) ;
593
635
}
594
636
}
595
637
}
@@ -613,7 +655,9 @@ function buildSideFaces(
613
655
steps ,
614
656
bevelSegments ,
615
657
verticesArray ,
616
- uvArray
658
+ uvArray ,
659
+ colorArray ,
660
+ color
617
661
) {
618
662
let layerOffset = 0 ;
619
663
// Create contour walls
@@ -625,7 +669,9 @@ function buildSideFaces(
625
669
steps ,
626
670
bevelSegments ,
627
671
verticesArray ,
628
- uvArray
672
+ uvArray ,
673
+ colorArray ,
674
+ color
629
675
) ;
630
676
layerOffset += contour . length ;
631
677
@@ -640,7 +686,9 @@ function buildSideFaces(
640
686
steps ,
641
687
bevelSegments ,
642
688
verticesArray ,
643
- uvArray
689
+ uvArray ,
690
+ colorArray ,
691
+ color
644
692
) ;
645
693
layerOffset += ahole . length ;
646
694
}
0 commit comments