Project

General

Profile

« Previous | Next » 

Revision 5f2853be

Added by Leszek Koltunski almost 7 years ago

Full support for any-depth MeshCubes.

View differences:

src/main/java/org/distorted/library/MeshCubes.java
109 109
          }
110 110
        }
111 111

  
112
      int frontVert = 2*( frontWalls + 2*frontSegments - 1) +2*triangleShifts + windingShifts;
113
      int sideVert  = 2*( mSideWalls + mSideBends + mEdgeNum -1);
114
      int firstWinding= (mSlices>0 && (frontVert+1)%2==1 ) ? 1:0;
115
      int dataL = mSlices==0 ? frontVert : (frontVert+1) +firstWinding+ (1+sideVert+1) + (1+frontVert);
112
      int frontVert       = 2*( frontWalls + 2*frontSegments - 1) +2*triangleShifts + windingShifts;
113
      int sideVertOneSlice= 2*( mSideWalls + mSideBends + mEdgeNum -1);
114
      int sideVert        = 2*(mSlices-1) + mSlices*sideVertOneSlice;
115
      int firstWinding    = (mSlices>0 && (frontVert+1)%2==1 ) ? 1:0;
116
      int dataL           = mSlices==0 ? frontVert : (frontVert+1) +firstWinding+ (1+sideVert+1) + (1+frontVert);
116 117
/*
117 118
      android.util.Log.e("CUBES","triangleShifts="+triangleShifts+" windingShifts="+windingShifts+" winding1="+firstWinding+" frontVert="+frontVert+" sideVert="+sideVert);
118 119
      android.util.Log.e("CUBES", "frontW="+frontWalls+" fSegments="+frontSegments+" sWalls="+mSideWalls+" sSegments="+mEdgeNum+" sideBends="+mSideBends+" dataLen="+dataL );
......
185 186
         for(int i=0; i<mRows; i++)
186 187
           mCubes[i][j] = (desc.charAt(i*mCols+j) == '1' ? 1:0);
187 188

  
188
       //android.util.Log.d("cubes", "VERT STRING:"+debug(mBoundingVert,3));
189

  
190 189
       markRegions();
191 190
       numVertices = computeDataLength();
192 191

  
......
498 497

  
499 498
  private int buildIthSide(Edge curr, int vertex, float[] attribs)
500 499
     {
501
     Edge prev; 
502
     
500
     Edge prev, next;
501
     int col, row, side;
502

  
503 503
     if( curr.side==NORTH ) // water outside
504 504
       {
505 505
       prev = new Edge(WEST,curr.row,curr.col);
......
509 509
       prev = curr;
510 510
       curr = new Edge(EAST,curr.row+1,curr.col-1);
511 511
       }
512
     
513
     int col = curr.col;
514
     int row = curr.row;
515
     int side= curr.side;  
516
     Edge next = getNextEdge(curr);
517
     
518
     addSideVertex(curr,BACK,LOWER,prev.side,vertex,attribs);
519
     vertex++;
520
     
521
     do
512

  
513
     for(int i=0; i<mSlices; i++)
522 514
       {
523
       if( prev.side!=curr.side )
515
       col = curr.col;
516
       row = curr.row;
517
       side= curr.side;
518
       next = getNextEdge(curr);
519
     
520
       addSideVertex(curr,BACK,i+1,prev.side,vertex++,attribs);
521

  
522
       do
524 523
         {
525
         addSideVertex(curr,BACK,LOWER,prev.side,vertex,attribs);
526
         vertex++;
527
         addSideVertex(curr,BACK,UPPER,prev.side,vertex,attribs);
528
         vertex++;
529
         }
524
         if( prev.side!=curr.side )
525
           {
526
           addSideVertex(curr,BACK,i+1,prev.side,vertex++,attribs);
527
           addSideVertex(curr,BACK,i  ,prev.side,vertex++,attribs);
528
           }
530 529
       
531
       addSideVertex(curr,FRONT,LOWER,next.side,vertex,attribs);
532
       vertex++;
533
       addSideVertex(curr,FRONT,UPPER,next.side,vertex,attribs);
534
       vertex++;
530
         addSideVertex(curr,FRONT,i+1,next.side,vertex++,attribs);
531
         addSideVertex(curr,FRONT,i  ,next.side,vertex++,attribs);
535 532
       
536
       prev = curr;
537
       curr = next; 
538
       next = getNextEdge(curr);
539
       }
540
     while( curr.col!=col || curr.row!=row || curr.side!=side );
541
     
542
     vertex = repeatLast(vertex,attribs);
533
         prev = curr;
534
         curr = next;
535
         next = getNextEdge(curr);
536
         }
537
       while( curr.col!=col || curr.row!=row || curr.side!=side );
543 538
     
539
       vertex = repeatLast(vertex,attribs);
540
       }
541

  
544 542
     return vertex;
545 543
     }
546 544

  
......
616 614

  
617 615
///////////////////////////////////////////////////////////////////////////////////////////////////
618 616
   
619
  private void addSideVertex(Edge curr, boolean back, boolean lower,int side, int vertex, float[] attribs)
617
  private void addSideVertex(Edge curr, boolean back, int slice,int side, int vertex, float[] attribs)
620 618
     {
621 619
     //android.util.Log.e("CUBES", "adding Side vertex!");
622 620

  
......
630 628

  
631 629
                   attribs[8*vertex  ] = x - 0.5f;
632 630
                   attribs[8*vertex+1] = 0.5f - (float)curr.row/mRows;
633
                   attribs[8*vertex+2] = lower ? BACKZ : FRONTZ;
631
                   attribs[8*vertex+2] = FRONTZ + ((BACKZ-FRONTZ)*slice)/mSlices;
634 632
                   attribs[8*vertex+3] = side==NORTH ? 0.0f : (side==WEST?-R:R);
635 633
                   attribs[8*vertex+4] = 1.0f;
636
                   attribs[8*vertex+5] = lower ? -R:R;
634
                   attribs[8*vertex+5] = (slice==0 ? R : (slice==mSlices ? -R:0) );
637 635
                   attribs[8*vertex+6] = x;
638
                   attribs[8*vertex+7] = 1.0f-(float)(lower? (curr.row-1):(curr.row  ))/mRows;
636
                   attribs[8*vertex+7] = 1.0f-(float)(curr.row-slice)/mRows;
639 637
                   break;
640 638
       case SOUTH: x = (float)(back ? (curr.col+1):(curr.col  ))/mCols;
641 639

  
642 640
                   attribs[8*vertex  ] = x - 0.5f;
643 641
                   attribs[8*vertex+1] = 0.5f - (float)(curr.row+1)/mRows;
644
                   attribs[8*vertex+2] = lower ? BACKZ : FRONTZ;
642
                   attribs[8*vertex+2] = FRONTZ + ((BACKZ-FRONTZ)*slice)/mSlices;
645 643
                   attribs[8*vertex+3] = side==SOUTH ? 0.0f: (side==EAST?-R:R);
646 644
                   attribs[8*vertex+4] =-1.0f;
647
                   attribs[8*vertex+5] = lower ? -R:R;
645
                   attribs[8*vertex+5] = (slice==0 ? R : (slice==mSlices ? -R:0) );
648 646
                   attribs[8*vertex+6] = x;
649
                   attribs[8*vertex+7] = 1.0f-(float)(lower? (curr.row+2):(curr.row+1))/mRows;
647
                   attribs[8*vertex+7] = 1.0f - (float)(curr.row+1+slice)/mRows;
650 648
                   break;
651 649
       case WEST : y = (float)(back  ? (curr.row+1):(curr.row))/mRows;
652 650

  
653 651
                   attribs[8*vertex  ] = (float)curr.col/mCols -0.5f;
654 652
                   attribs[8*vertex+1] = 0.5f - y;
655
                   attribs[8*vertex+2] = lower ? BACKZ : FRONTZ;
653
                   attribs[8*vertex+2] = FRONTZ + ((BACKZ-FRONTZ)*slice)/mSlices;
656 654
                   attribs[8*vertex+3] =-1.0f;
657 655
                   attribs[8*vertex+4] = side==WEST ? 0.0f : (side==NORTH?-R:R);
658
                   attribs[8*vertex+5] = lower ? -R:R;
659
                   attribs[8*vertex+6] = (float)(lower ? (curr.col-1):(curr.col  ))/mCols;
656
                   attribs[8*vertex+5] = (slice==0 ? R : (slice==mSlices ? -R:0) );
657
                   attribs[8*vertex+6] = (float)(curr.col-slice)/mCols;
660 658
                   attribs[8*vertex+7] = 1.0f - y;
661 659
                   break;
662 660
       case EAST : y = (float)(back  ? (curr.row):(curr.row+1))/mRows;
663 661

  
664 662
                   attribs[8*vertex  ] = (float)(curr.col+1)/mCols -0.5f;
665 663
                   attribs[8*vertex+1] = 0.5f - y;
666
                   attribs[8*vertex+2] = lower ? BACKZ : FRONTZ;
664
                   attribs[8*vertex+2] = FRONTZ + ((BACKZ-FRONTZ)*slice)/mSlices;
667 665
                   attribs[8*vertex+3] = 1.0f;
668 666
                   attribs[8*vertex+4] = side==EAST ? 0.0f : (side==SOUTH?-R:R);
669
                   attribs[8*vertex+5] = lower ? -R:R;
670
                   attribs[8*vertex+6] = (float)(lower ? (curr.col+2):(curr.col+1))/mCols;
667
                   attribs[8*vertex+5] = (slice==0 ? R : (slice==mSlices ? -R:0) );
668
                   attribs[8*vertex+6] = (float)(curr.col+1+slice)/mCols;
671 669
                   attribs[8*vertex+7] = 1.0f - y;
672 670
                   break;
673 671
       }

Also available in: Unified diff