Project

General

Profile

« Previous | Next » 

Revision e54bfada

Added by Leszek Koltunski about 4 years ago

Have VERTEX_QUATERNION, VERTEX_ROTATE and VERTEX_SHEAR modify inflate vectors.
Split Vertex attribute array into two (the one modified by preapply effects and the one not)

View differences:

src/main/java/org/distorted/library/mesh/MeshCubes.java
391 391

  
392 392
///////////////////////////////////////////////////////////////////////////////////////////////////
393 393

  
394
  private void buildFrontBackGrid(boolean front, float[] attribs)
394
  private void buildFrontBackGrid(boolean front, float[] attribs1, float[] attribs2)
395 395
     {
396 396
     int last, current;
397 397
     boolean seenLand=false;
......
413 413

  
414 414
           if( !seenLand && !front && ((currVert%2==1)^currentBlockIsNE) )
415 415
             {
416
             repeatLast(attribs);
416
             repeatLast(attribs1,attribs2);
417 417
             }
418 418

  
419 419
           createNormals(front,row,col);
......
422 422
             {
423 423
             if( (last!=current) || !lastBlockIsNE )
424 424
               {
425
               if( seenLand  && (last != current) ) repeatLast(attribs);
426
               addFrontVertex( 0, vectZ, col, row, attribs);
427
               if( seenLand  && (last != current) ) repeatLast(attribs);
428
               if( !lastBlockIsNE || (!front && !seenLand) ) repeatLast(attribs);
429
               addFrontVertex( 1, vectZ, col, row+1, attribs);
425
               if( seenLand  && (last != current) ) repeatLast(attribs1,attribs2);
426
               addFrontVertex( 0, vectZ, col, row, attribs1,attribs2);
427
               if( seenLand  && (last != current) ) repeatLast(attribs1,attribs2);
428
               if( !lastBlockIsNE || (!front && !seenLand) ) repeatLast(attribs1,attribs2);
429
               addFrontVertex( 1, vectZ, col, row+1, attribs1,attribs2);
430 430
               }
431
             addFrontVertex( 2, vectZ, col+1, row  , attribs);
432
             addFrontVertex( 3, vectZ, col+1, row+1, attribs);
431
             addFrontVertex( 2, vectZ, col+1, row  , attribs1,attribs2);
432
             addFrontVertex( 3, vectZ, col+1, row+1, attribs1,attribs2);
433 433
             }
434 434
           else
435 435
             {
436 436
             if( (last!=current) || lastBlockIsNE )
437 437
               {
438
               if( seenLand  && (last != current) ) repeatLast(attribs);
439
               addFrontVertex( 1, vectZ, col, row+1, attribs);
440
               if( seenLand  && (last != current) ) repeatLast(attribs);
441
               if( lastBlockIsNE || (!front && !seenLand) ) repeatLast(attribs);
442
               addFrontVertex( 0, vectZ, col, row, attribs);
438
               if( seenLand  && (last != current) ) repeatLast(attribs1,attribs2);
439
               addFrontVertex( 1, vectZ, col, row+1, attribs1,attribs2);
440
               if( seenLand  && (last != current) ) repeatLast(attribs1,attribs2);
441
               if( lastBlockIsNE || (!front && !seenLand) ) repeatLast(attribs1,attribs2);
442
               addFrontVertex( 0, vectZ, col, row, attribs1,attribs2);
443 443
               }
444
             addFrontVertex( 3, vectZ, col+1, row+1, attribs);
445
             addFrontVertex( 2, vectZ, col+1, row  , attribs);
444
             addFrontVertex( 3, vectZ, col+1, row+1, attribs1,attribs2);
445
             addFrontVertex( 2, vectZ, col+1, row  , attribs1,attribs2);
446 446
             }
447 447

  
448 448
           seenLand = true;
......
456 456

  
457 457
///////////////////////////////////////////////////////////////////////////////////////////////////
458 458

  
459
  private void buildSideGrid(float[] attribs)
459
  private void buildSideGrid(float[] attribs1,float[] attribs2)
460 460
     {
461 461
     for(int i=0; i<mEdgeNum; i++)
462 462
       {
463
       buildIthSide(mEdges.get(i), attribs);
463
       buildIthSide(mEdges.get(i), attribs1, attribs2);
464 464
       }
465 465
     }
466 466

  
467 467
///////////////////////////////////////////////////////////////////////////////////////////////////
468 468

  
469
  private void buildIthSide(Edge curr, float[] attribs)
469
  private void buildIthSide(Edge curr, float[] attribs1, float[] attribs2)
470 470
     {
471 471
     Edge prev, next;
472 472
     int col, row, side;
......
488 488
       side= curr.side;
489 489
       next = getNextEdge(curr);
490 490
     
491
       addSideVertex(curr,true,slice+1,prev.side,attribs);
491
       addSideVertex(curr,true,slice+1,prev.side,attribs1,attribs2);
492 492

  
493 493
       do
494 494
         {
495 495
         if( prev.side!=curr.side )
496 496
           {
497
           addSideVertex(curr,true,slice+1,prev.side,attribs);
498
           addSideVertex(curr,true,slice  ,prev.side,attribs);
497
           addSideVertex(curr,true,slice+1,prev.side,attribs1,attribs2);
498
           addSideVertex(curr,true,slice  ,prev.side,attribs1,attribs2);
499 499
           }
500 500
       
501
         addSideVertex(curr,false,slice+1,next.side,attribs);
502
         addSideVertex(curr,false,slice  ,next.side,attribs);
501
         addSideVertex(curr,false,slice+1,next.side,attribs1,attribs2);
502
         addSideVertex(curr,false,slice  ,next.side,attribs1,attribs2);
503 503
       
504 504
         prev = curr;
505 505
         curr = next;
......
507 507
         }
508 508
       while( curr.col!=col || curr.row!=row || curr.side!=side );
509 509
     
510
       repeatLast(attribs);
510
       repeatLast(attribs1,attribs2);
511 511
       }
512 512
     }
513 513

  
......
615 615

  
616 616
///////////////////////////////////////////////////////////////////////////////////////////////////
617 617

  
618
  private void addFrontVertex(int index, float vectZ, int col, int row, float[] attribs)
618
  private void addFrontVertex(int index, float vectZ, int col, int row, float[] attribs1, float[] attribs2)
619 619
     {
620 620
     float x = (float)col/mCols;
621 621
     float y = (float)row/mRows;
622 622

  
623
     attribs[VERT_ATTRIBS*currVert + POS_ATTRIB  ] = x-0.5f;
624
     attribs[VERT_ATTRIBS*currVert + POS_ATTRIB+1] = 0.5f-y;
625
     attribs[VERT_ATTRIBS*currVert + POS_ATTRIB+2] = vectZ;
623
     attribs1[VERT1_ATTRIBS*currVert + POS_ATTRIB  ] = x-0.5f;
624
     attribs1[VERT1_ATTRIBS*currVert + POS_ATTRIB+1] = 0.5f-y;
625
     attribs1[VERT1_ATTRIBS*currVert + POS_ATTRIB+2] = vectZ;
626 626

  
627
     attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB  ] = mNormalX[index];
628
     attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB+1] = mNormalY[index];
629
     attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB+2] = mNormalZ[index];
627
     attribs1[VERT1_ATTRIBS*currVert + NOR_ATTRIB  ] = mNormalX[index];
628
     attribs1[VERT1_ATTRIBS*currVert + NOR_ATTRIB+1] = mNormalY[index];
629
     attribs1[VERT1_ATTRIBS*currVert + NOR_ATTRIB+2] = mNormalZ[index];
630 630

  
631
     attribs[VERT_ATTRIBS*currVert + INF_ATTRIB  ] = mInflateX[row][col]/2.0f;
632
     attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+1] = mInflateY[row][col]/2.0f;
633
     attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+2] = vectZ;
631
     attribs1[VERT1_ATTRIBS*currVert + INF_ATTRIB  ] = mInflateX[row][col]/2.0f;
632
     attribs1[VERT1_ATTRIBS*currVert + INF_ATTRIB+1] = mInflateY[row][col]/2.0f;
633
     attribs1[VERT1_ATTRIBS*currVert + INF_ATTRIB+2] = vectZ;
634 634

  
635 635
     if( vectZ>0 )
636 636
       {
637
       attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB  ] = mTexMappingX[FRONT] +       x  * mTexMappingW[FRONT];
638
       attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB+1] = mTexMappingY[FRONT] + (1.0f-y) * mTexMappingH[FRONT];
637
       attribs2[VERT2_ATTRIBS*currVert + TEX_ATTRIB  ] = mTexMappingX[FRONT] +       x  * mTexMappingW[FRONT];
638
       attribs2[VERT2_ATTRIBS*currVert + TEX_ATTRIB+1] = mTexMappingY[FRONT] + (1.0f-y) * mTexMappingH[FRONT];
639 639
       }
640 640
     else
641 641
       {
642
       attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB  ] = mTexMappingX[BACK]  +       x  * mTexMappingW[BACK];
643
       attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB+1] = mTexMappingY[BACK]  + (1.0f-y) * mTexMappingH[BACK];
642
       attribs2[VERT2_ATTRIBS*currVert + TEX_ATTRIB  ] = mTexMappingX[BACK]  +       x  * mTexMappingW[BACK];
643
       attribs2[VERT2_ATTRIBS*currVert + TEX_ATTRIB+1] = mTexMappingY[BACK]  + (1.0f-y) * mTexMappingH[BACK];
644 644
       }
645 645

  
646 646
     currVert++;
......
648 648

  
649 649
///////////////////////////////////////////////////////////////////////////////////////////////////
650 650

  
651
  private void addSideVertex(Edge curr, boolean back, int slice, int side, float[] attribs)
651
  private void addSideVertex(Edge curr, boolean back, int slice, int side, float[] attribs1, float[] attribs2)
652 652
     {
653 653
     float x, y, z;
654 654
     int row, col;
......
661 661
                   y = 0.5f - (float)row/mRows;
662 662
                   z = 0.5f - (float)slice/mSlices;
663 663

  
664
                   attribs[VERT_ATTRIBS*currVert + POS_ATTRIB  ] = x - 0.5f;
665
                   attribs[VERT_ATTRIBS*currVert + POS_ATTRIB+1] = y;
666
                   attribs[VERT_ATTRIBS*currVert + POS_ATTRIB+2] = z;
664
                   attribs1[VERT1_ATTRIBS*currVert + POS_ATTRIB  ] = x - 0.5f;
665
                   attribs1[VERT1_ATTRIBS*currVert + POS_ATTRIB+1] = y;
666
                   attribs1[VERT1_ATTRIBS*currVert + POS_ATTRIB+2] = z;
667 667

  
668
                   attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB  ] = side==NORTH ? 0.0f : (side==WEST?-R:R);
669
                   attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB+1] = 1.0f;
670
                   attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB+2] = (slice==0 ? R : (slice==mSlices ? -R:0) );
668
                   attribs1[VERT1_ATTRIBS*currVert + NOR_ATTRIB  ] = side==NORTH ? 0.0f : (side==WEST?-R:R);
669
                   attribs1[VERT1_ATTRIBS*currVert + NOR_ATTRIB+1] = 1.0f;
670
                   attribs1[VERT1_ATTRIBS*currVert + NOR_ATTRIB+2] = (slice==0 ? R : (slice==mSlices ? -R:0) );
671 671

  
672
                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB  ] = mInflateX[row][col]/2.0f;
673
                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+1] = mInflateY[row][col]/2.0f;
674
                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+2] = z;
672
                   attribs1[VERT1_ATTRIBS*currVert + INF_ATTRIB  ] = mInflateX[row][col]/2.0f;
673
                   attribs1[VERT1_ATTRIBS*currVert + INF_ATTRIB+1] = mInflateY[row][col]/2.0f;
674
                   attribs1[VERT1_ATTRIBS*currVert + INF_ATTRIB+2] = z;
675 675

  
676
                   attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB  ] = mTexMappingX[TOP] +       x  * mTexMappingW[TOP];
677
                   attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB+1] = mTexMappingY[TOP] + (0.5f-z) * mTexMappingH[TOP];
676
                   attribs2[VERT2_ATTRIBS*currVert + TEX_ATTRIB  ] = mTexMappingX[TOP] +       x  * mTexMappingW[TOP];
677
                   attribs2[VERT2_ATTRIBS*currVert + TEX_ATTRIB+1] = mTexMappingY[TOP] + (0.5f-z) * mTexMappingH[TOP];
678 678

  
679 679
                   break;
680 680
       case SOUTH: row = curr.row+1;
......
683 683
                   y = 0.5f - (float)row/mRows;
684 684
                   z = 0.5f - (float)slice/mSlices;
685 685

  
686
                   attribs[VERT_ATTRIBS*currVert + POS_ATTRIB  ] = x - 0.5f;
687
                   attribs[VERT_ATTRIBS*currVert + POS_ATTRIB+1] = y;
688
                   attribs[VERT_ATTRIBS*currVert + POS_ATTRIB+2] = z;
686
                   attribs1[VERT1_ATTRIBS*currVert + POS_ATTRIB  ] = x - 0.5f;
687
                   attribs1[VERT1_ATTRIBS*currVert + POS_ATTRIB+1] = y;
688
                   attribs1[VERT1_ATTRIBS*currVert + POS_ATTRIB+2] = z;
689 689

  
690
                   attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB  ] = side==SOUTH ? 0.0f: (side==EAST?-R:R);
691
                   attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB+1] =-1.0f;
692
                   attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB+2] = (slice==0 ? R : (slice==mSlices ? -R:0) );
690
                   attribs1[VERT1_ATTRIBS*currVert + NOR_ATTRIB  ] = side==SOUTH ? 0.0f: (side==EAST?-R:R);
691
                   attribs1[VERT1_ATTRIBS*currVert + NOR_ATTRIB+1] =-1.0f;
692
                   attribs1[VERT1_ATTRIBS*currVert + NOR_ATTRIB+2] = (slice==0 ? R : (slice==mSlices ? -R:0) );
693 693

  
694
                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB  ] = mInflateX[row][col]/2.0f;
695
                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+1] = mInflateY[row][col]/2.0f;
696
                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+2] = z;
694
                   attribs1[VERT1_ATTRIBS*currVert + INF_ATTRIB  ] = mInflateX[row][col]/2.0f;
695
                   attribs1[VERT1_ATTRIBS*currVert + INF_ATTRIB+1] = mInflateY[row][col]/2.0f;
696
                   attribs1[VERT1_ATTRIBS*currVert + INF_ATTRIB+2] = z;
697 697

  
698
                   attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB  ] = mTexMappingX[BOTTOM] +       x  * mTexMappingW[BOTTOM];
699
                   attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB+1] = mTexMappingY[BOTTOM] + (0.5f-z) * mTexMappingH[BOTTOM];
698
                   attribs2[VERT2_ATTRIBS*currVert + TEX_ATTRIB  ] = mTexMappingX[BOTTOM] +       x  * mTexMappingW[BOTTOM];
699
                   attribs2[VERT2_ATTRIBS*currVert + TEX_ATTRIB+1] = mTexMappingY[BOTTOM] + (0.5f-z) * mTexMappingH[BOTTOM];
700 700

  
701 701
                   break;
702 702
       case WEST : row = (back  ? (curr.row+1):(curr.row));
......
705 705
                   y = (float)row/mRows;
706 706
                   z = 0.5f - (float)slice/mSlices;
707 707

  
708
                   attribs[VERT_ATTRIBS*currVert + POS_ATTRIB  ] = x;
709
                   attribs[VERT_ATTRIBS*currVert + POS_ATTRIB+1] = 0.5f - y;
710
                   attribs[VERT_ATTRIBS*currVert + POS_ATTRIB+2] = z;
708
                   attribs1[VERT1_ATTRIBS*currVert + POS_ATTRIB  ] = x;
709
                   attribs1[VERT1_ATTRIBS*currVert + POS_ATTRIB+1] = 0.5f - y;
710
                   attribs1[VERT1_ATTRIBS*currVert + POS_ATTRIB+2] = z;
711 711

  
712
                   attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB  ] =-1.0f;
713
                   attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB+1] = side==WEST ? 0.0f : (side==NORTH?-R:R);
714
                   attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB+2] = (slice==0 ? R : (slice==mSlices ? -R:0) );
712
                   attribs1[VERT1_ATTRIBS*currVert + NOR_ATTRIB  ] =-1.0f;
713
                   attribs1[VERT1_ATTRIBS*currVert + NOR_ATTRIB+1] = side==WEST ? 0.0f : (side==NORTH?-R:R);
714
                   attribs1[VERT1_ATTRIBS*currVert + NOR_ATTRIB+2] = (slice==0 ? R : (slice==mSlices ? -R:0) );
715 715

  
716
                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB  ] = mInflateX[row][col]/2.0f;
717
                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+1] = mInflateY[row][col]/2.0f;
718
                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+2] = z;
716
                   attribs1[VERT1_ATTRIBS*currVert + INF_ATTRIB  ] = mInflateX[row][col]/2.0f;
717
                   attribs1[VERT1_ATTRIBS*currVert + INF_ATTRIB+1] = mInflateY[row][col]/2.0f;
718
                   attribs1[VERT1_ATTRIBS*currVert + INF_ATTRIB+2] = z;
719 719

  
720
                   attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB  ] = mTexMappingX[LEFT] + (0.5f-z) * mTexMappingW[LEFT];
721
                   attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB+1] = mTexMappingY[LEFT] + (1.0f-y) * mTexMappingH[LEFT];
720
                   attribs2[VERT2_ATTRIBS*currVert + TEX_ATTRIB  ] = mTexMappingX[LEFT] + (0.5f-z) * mTexMappingW[LEFT];
721
                   attribs2[VERT2_ATTRIBS*currVert + TEX_ATTRIB+1] = mTexMappingY[LEFT] + (1.0f-y) * mTexMappingH[LEFT];
722 722

  
723 723
                   break;
724 724
       case EAST : row = (back  ? (curr.row):(curr.row+1));
......
727 727
                   y = (float)row/mRows;
728 728
                   z = 0.5f - (float)slice/mSlices;
729 729

  
730
                   attribs[VERT_ATTRIBS*currVert + POS_ATTRIB  ] = x;
731
                   attribs[VERT_ATTRIBS*currVert + POS_ATTRIB+1] = 0.5f - y;
732
                   attribs[VERT_ATTRIBS*currVert + POS_ATTRIB+2] = z;
730
                   attribs1[VERT1_ATTRIBS*currVert + POS_ATTRIB  ] = x;
731
                   attribs1[VERT1_ATTRIBS*currVert + POS_ATTRIB+1] = 0.5f - y;
732
                   attribs1[VERT1_ATTRIBS*currVert + POS_ATTRIB+2] = z;
733 733

  
734
                   attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB  ] = 1.0f;
735
                   attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB+1] = side==EAST ? 0.0f : (side==SOUTH?-R:R);
736
                   attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB+2] = (slice==0 ? R : (slice==mSlices ? -R:0) );
734
                   attribs1[VERT1_ATTRIBS*currVert + NOR_ATTRIB  ] = 1.0f;
735
                   attribs1[VERT1_ATTRIBS*currVert + NOR_ATTRIB+1] = side==EAST ? 0.0f : (side==SOUTH?-R:R);
736
                   attribs1[VERT1_ATTRIBS*currVert + NOR_ATTRIB+2] = (slice==0 ? R : (slice==mSlices ? -R:0) );
737 737

  
738
                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB  ] = mInflateX[row][col]/2.0f;
739
                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+1] = mInflateY[row][col]/2.0f;
740
                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+2] = z;
738
                   attribs1[VERT1_ATTRIBS*currVert + INF_ATTRIB  ] = mInflateX[row][col]/2.0f;
739
                   attribs1[VERT1_ATTRIBS*currVert + INF_ATTRIB+1] = mInflateY[row][col]/2.0f;
740
                   attribs1[VERT1_ATTRIBS*currVert + INF_ATTRIB+2] = z;
741 741

  
742
                   attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB  ] = mTexMappingX[RIGHT] + (0.5f-z) * mTexMappingW[RIGHT];
743
                   attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB+1] = mTexMappingY[RIGHT] + (1.0f-y) * mTexMappingH[RIGHT];
742
                   attribs2[VERT2_ATTRIBS*currVert + TEX_ATTRIB  ] = mTexMappingX[RIGHT] + (0.5f-z) * mTexMappingW[RIGHT];
743
                   attribs2[VERT2_ATTRIBS*currVert + TEX_ATTRIB+1] = mTexMappingY[RIGHT] + (1.0f-y) * mTexMappingH[RIGHT];
744 744

  
745 745
                   break;
746 746
       }
......
750 750

  
751 751
///////////////////////////////////////////////////////////////////////////////////////////////////
752 752

  
753
   private void repeatLast(float[] attribs)
753
   private void repeatLast(float[] attribs1, float[] attribs2)
754 754
     {
755
     attribs[VERT_ATTRIBS*currVert + POS_ATTRIB  ] = attribs[VERT_ATTRIBS*(currVert-1) + POS_ATTRIB  ];
756
     attribs[VERT_ATTRIBS*currVert + POS_ATTRIB+1] = attribs[VERT_ATTRIBS*(currVert-1) + POS_ATTRIB+1];
757
     attribs[VERT_ATTRIBS*currVert + POS_ATTRIB+2] = attribs[VERT_ATTRIBS*(currVert-1) + POS_ATTRIB+2];
755
     attribs1[VERT1_ATTRIBS*currVert + POS_ATTRIB  ] = attribs1[VERT1_ATTRIBS*(currVert-1) + POS_ATTRIB  ];
756
     attribs1[VERT1_ATTRIBS*currVert + POS_ATTRIB+1] = attribs1[VERT1_ATTRIBS*(currVert-1) + POS_ATTRIB+1];
757
     attribs1[VERT1_ATTRIBS*currVert + POS_ATTRIB+2] = attribs1[VERT1_ATTRIBS*(currVert-1) + POS_ATTRIB+2];
758 758

  
759
     attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB  ] = attribs[VERT_ATTRIBS*(currVert-1) + NOR_ATTRIB  ];
760
     attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB+1] = attribs[VERT_ATTRIBS*(currVert-1) + NOR_ATTRIB+1];
761
     attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB+2] = attribs[VERT_ATTRIBS*(currVert-1) + NOR_ATTRIB+2];
759
     attribs1[VERT1_ATTRIBS*currVert + NOR_ATTRIB  ] = attribs1[VERT1_ATTRIBS*(currVert-1) + NOR_ATTRIB  ];
760
     attribs1[VERT1_ATTRIBS*currVert + NOR_ATTRIB+1] = attribs1[VERT1_ATTRIBS*(currVert-1) + NOR_ATTRIB+1];
761
     attribs1[VERT1_ATTRIBS*currVert + NOR_ATTRIB+2] = attribs1[VERT1_ATTRIBS*(currVert-1) + NOR_ATTRIB+2];
762 762

  
763
     attribs[VERT_ATTRIBS*currVert + INF_ATTRIB  ] = attribs[VERT_ATTRIBS*(currVert-1) + INF_ATTRIB  ];
764
     attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+1] = attribs[VERT_ATTRIBS*(currVert-1) + INF_ATTRIB+1];
765
     attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+2] = attribs[VERT_ATTRIBS*(currVert-1) + INF_ATTRIB+2];
763
     attribs1[VERT1_ATTRIBS*currVert + INF_ATTRIB  ] = attribs1[VERT1_ATTRIBS*(currVert-1) + INF_ATTRIB  ];
764
     attribs1[VERT1_ATTRIBS*currVert + INF_ATTRIB+1] = attribs1[VERT1_ATTRIBS*(currVert-1) + INF_ATTRIB+1];
765
     attribs1[VERT1_ATTRIBS*currVert + INF_ATTRIB+2] = attribs1[VERT1_ATTRIBS*(currVert-1) + INF_ATTRIB+2];
766 766

  
767
     attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB  ] = attribs[VERT_ATTRIBS*(currVert-1) + TEX_ATTRIB  ];
768
     attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB+1] = attribs[VERT_ATTRIBS*(currVert-1) + TEX_ATTRIB+1];
767
     attribs2[VERT2_ATTRIBS*currVert + TEX_ATTRIB  ] = attribs2[VERT2_ATTRIBS*(currVert-1) + TEX_ATTRIB  ];
768
     attribs2[VERT2_ATTRIBS*currVert + TEX_ATTRIB+1] = attribs2[VERT2_ATTRIBS*(currVert-1) + TEX_ATTRIB+1];
769 769

  
770 770
     currVert++;
771 771
     }
......
774 774

  
775 775
  private void build()
776 776
     {
777
     float[] attribs= new float[VERT_ATTRIBS*numVertices];
777
     float[] attribs1= new float[VERT1_ATTRIBS*numVertices];
778
     float[] attribs2= new float[VERT2_ATTRIBS*numVertices];
778 779

  
779
     buildFrontBackGrid(true,attribs);
780
     buildFrontBackGrid(true,attribs1,attribs2);
780 781

  
781 782
     if( mSlices>0 )
782 783
       {
783
       repeatLast(attribs);
784
       if( currVert%2==1 ) repeatLast(attribs);
785
       buildSideGrid(attribs);
786
       buildFrontBackGrid(false,attribs);
784
       repeatLast(attribs1,attribs2);
785
       if( currVert%2==1 ) repeatLast(attribs1,attribs2);
786
       buildSideGrid(attribs1,attribs2);
787
       buildFrontBackGrid(false,attribs1,attribs2);
787 788
       }
788 789

  
789 790
     mEdges.clear();
......
795 796
     if( currVert!=numVertices )
796 797
       android.util.Log.e("MeshCubes", "currVert " +currVert+" numVertices="+numVertices );
797 798

  
798
     setAttribs(attribs);
799
     setAttribs(attribs1,attribs2);
799 800
     }
800 801

  
801 802
///////////////////////////////////////////////////////////////////////////////////////////////////

Also available in: Unified diff