Revision d1a396b2
Added by Leszek Koltunski over 7 years ago
src/main/java/org/distorted/library/MeshCubes.java | ||
---|---|---|
84 | 84 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
85 | 85 |
// return the number of vertices our grid will contain |
86 | 86 |
|
87 |
private int computeDataLength(int slices)
|
|
87 |
private int computeDataLength() |
|
88 | 88 |
{ |
89 | 89 |
int frontWalls=0, frontSegments=0, triangleShifts=0, windingShifts=0; |
90 | 90 |
int shiftCol = (mCols-1)/2; |
... | ... | |
111 | 111 |
|
112 | 112 |
int frontVert = 2*( frontWalls + 2*frontSegments - 1) +2*triangleShifts + windingShifts; |
113 | 113 |
int sideVert = 2*( mSideWalls + mSideBends + mEdgeNum -1); |
114 |
int firstWinding= (slices>0 && (frontVert+1)%2==1 ) ? 1:0;
|
|
115 |
int dataL = slices==0 ? frontVert : (frontVert+1) +firstWinding+ (1+sideVert+1) + (1+frontVert);
|
|
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);
|
|
116 | 116 |
/* |
117 | 117 |
android.util.Log.e("CUBES","triangleShifts="+triangleShifts+" windingShifts="+windingShifts+" winding1="+firstWinding+" frontVert="+frontVert+" sideVert="+sideVert); |
118 | 118 |
android.util.Log.e("CUBES", "frontW="+frontWalls+" fSegments="+frontSegments+" sWalls="+mSideWalls+" sSegments="+mEdgeNum+" sideBends="+mSideBends+" dataLen="+dataL ); |
... | ... | |
188 | 188 |
//android.util.Log.d("cubes", "VERT STRING:"+debug(mBoundingVert,3)); |
189 | 189 |
|
190 | 190 |
markRegions(); |
191 |
numVertices = computeDataLength(slices);
|
|
191 |
numVertices = computeDataLength(); |
|
192 | 192 |
|
193 | 193 |
remainingVert = numVertices; |
194 | 194 |
} |
... | ... | |
213 | 213 |
mCubes[i][j] = 1; |
214 | 214 |
|
215 | 215 |
markRegions(); |
216 |
numVertices = computeDataLength(slices);
|
|
216 |
numVertices = computeDataLength(); |
|
217 | 217 |
|
218 | 218 |
remainingVert = numVertices; |
219 | 219 |
} |
... | ... | |
482 | 482 |
|
483 | 483 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
484 | 484 |
|
485 |
private int buildSideGrid(int vertex, int slices, float[] attribs)
|
|
485 |
private int buildSideGrid(int vertex, float[] attribs) |
|
486 | 486 |
{ |
487 | 487 |
//android.util.Log.d("CUBES", "buildSide"); |
488 | 488 |
|
489 | 489 |
for(int i=0; i<mEdgeNum; i++) |
490 | 490 |
{ |
491 |
vertex = buildIthSide(mEdges.get(i), vertex, slices, attribs);
|
|
491 |
vertex = buildIthSide(mEdges.get(i), vertex, attribs); |
|
492 | 492 |
} |
493 | 493 |
|
494 | 494 |
return vertex; |
... | ... | |
496 | 496 |
|
497 | 497 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
498 | 498 |
|
499 |
private int buildIthSide(Edge curr, int vertex, int slices, float[] attribs)
|
|
499 |
private int buildIthSide(Edge curr, int vertex, float[] attribs) |
|
500 | 500 |
{ |
501 | 501 |
Edge prev; |
502 | 502 |
|
... | ... | |
504 | 504 |
{ |
505 | 505 |
prev = new Edge(WEST,curr.row,curr.col); |
506 | 506 |
} |
507 |
else // land outside; we need to move forward one link because we are going in opposite direction and we need to start from a bend.
|
|
508 |
{ |
|
507 |
else // land outside; we need to move forward one link because we are |
|
508 |
{ // going in opposite direction and we need to start from a bend.
|
|
509 | 509 |
prev = curr; |
510 | 510 |
curr = new Edge(EAST,curr.row+1,curr.col-1); |
511 | 511 |
} |
... | ... | |
680 | 680 |
|
681 | 681 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
682 | 682 |
|
683 |
private void build(int slices)
|
|
683 |
private void build() |
|
684 | 684 |
{ |
685 | 685 |
int vertSoFar=0; |
686 | 686 |
float[] attribs= new float[(POS_DATA_SIZE+NOR_DATA_SIZE+TEX_DATA_SIZE)*numVertices]; |
... | ... | |
689 | 689 |
|
690 | 690 |
vertSoFar = buildFrontBackGrid(true, vertSoFar,attribs); |
691 | 691 |
|
692 |
if( slices>0 )
|
|
692 |
if( mSlices>0 )
|
|
693 | 693 |
{ |
694 | 694 |
vertSoFar = repeatLast(vertSoFar,attribs); |
695 | 695 |
if( vertSoFar%2==1 ) |
... | ... | |
701 | 701 |
|
702 | 702 |
//android.util.Log.d("MeshCubes","building side grid..."); |
703 | 703 |
|
704 |
vertSoFar = buildSideGrid (vertSoFar,slices,attribs);
|
|
704 |
vertSoFar = buildSideGrid (vertSoFar,attribs); |
|
705 | 705 |
|
706 | 706 |
//android.util.Log.d("MeshCubes","building back grid..."); |
707 | 707 |
|
... | ... | |
753 | 753 |
{ |
754 | 754 |
super( (float)slices/cols); |
755 | 755 |
prepareDataStructures(cols,desc,slices); |
756 |
build(slices);
|
|
756 |
build(); |
|
757 | 757 |
} |
758 | 758 |
|
759 | 759 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
768 | 768 |
{ |
769 | 769 |
super( (float)slices/cols); |
770 | 770 |
prepareDataStructures(cols,rows,slices); |
771 |
build(slices);
|
|
771 |
build(); |
|
772 | 772 |
} |
773 | 773 |
} |
Also available in: Unified diff
Progress with any depth MeshCubes.