Revision e5d9b235
Added by Leszek Koltunski over 8 years ago
src/main/java/org/distorted/library/DistortedCubesGrid.java | ||
---|---|---|
413 | 413 |
|
414 | 414 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
415 | 415 |
|
416 |
private int addFrontVertex(int corner, int vertex, float vectZ, int col, int row, float[] position, float[] normal, float[] texture)
|
|
416 |
private int addFrontVertex(int vertex, int index, float vectZ, int col, int row, float[] position, float[] normal, float[] texture)
|
|
417 | 417 |
{ |
418 | 418 |
remainingVert--; |
419 | 419 |
|
420 |
float x=0,y=0; |
|
421 |
int index=0; |
|
422 |
|
|
423 |
switch(corner) |
|
424 |
{ |
|
425 |
case NW: x = (float)col/mCols; |
|
426 |
y = (float)row/mRows; |
|
427 |
index = 0; |
|
428 |
break; |
|
429 |
case SW: x = (float)col/mCols; |
|
430 |
y = (float)(row+1)/mRows; |
|
431 |
index = 1; |
|
432 |
break; |
|
433 |
case NE: x = (float)(col+1)/mCols; |
|
434 |
y = (float)row/mRows; |
|
435 |
index = 2; |
|
436 |
break; |
|
437 |
case SE: x = (float)(col+1)/mCols; |
|
438 |
y = (float)(row+1)/mRows; |
|
439 |
index = 3; |
|
440 |
break; |
|
441 |
} |
|
420 |
float x = (float)col/mCols; |
|
421 |
float y = (float)row/mRows; |
|
442 | 422 |
|
443 | 423 |
position[3*vertex ] = x-0.5f; |
444 | 424 |
position[3*vertex+1] = 0.5f-y; |
... | ... | |
464 | 444 |
|
465 | 445 |
//android.util.Log.d("CUBES", "buildFrontBack"); |
466 | 446 |
|
467 |
for(int i=0; i<mRows; i++)
|
|
447 |
for(int row=0; row<mRows; row++)
|
|
468 | 448 |
{ |
469 | 449 |
last =0; |
470 | 450 |
|
471 |
for(int j=0; j<mCols; j++)
|
|
451 |
for(int col=0; col<mCols; col++)
|
|
472 | 452 |
{ |
473 |
current = mCubes[i][j];
|
|
453 |
current = mCubes[row][col];
|
|
474 | 454 |
|
475 | 455 |
if( current%2 == 1 ) |
476 | 456 |
{ |
477 |
currentBlockIsNE = isNE(i,j);
|
|
457 |
currentBlockIsNE = isNE(row,col);
|
|
478 | 458 |
|
479 | 459 |
if( !seenLand && !front && ((vertex%2==1)^currentBlockIsNE) ) |
480 | 460 |
{ |
... | ... | |
483 | 463 |
vertex = repeatLast(vertex,position,normal,texture); |
484 | 464 |
} |
485 | 465 |
|
486 |
createNormals(front,i,j);
|
|
466 |
createNormals(front,row,col);
|
|
487 | 467 |
|
488 |
if( (last!=current) || (lastBlockIsNE^currentBlockIsNE) )
|
|
468 |
if( currentBlockIsNE )
|
|
489 | 469 |
{ |
490 |
if( seenLand && (last != current) ) vertex = repeatLast(vertex,position,normal,texture); |
|
491 |
vertex= addFrontVertex( currentBlockIsNE ? NW:SW, vertex, vectZ, j, i, position, normal, texture); |
|
492 |
if( seenLand && (last != current) ) vertex = repeatLast(vertex,position,normal,texture); |
|
493 |
if( (lastBlockIsNE^currentBlockIsNE) |
|
494 |
|| (!front && !seenLand) ) vertex = repeatLast(vertex,position,normal,texture); |
|
495 |
vertex= addFrontVertex( currentBlockIsNE ? SW:NW, vertex, vectZ, j, i, position, normal, texture); |
|
470 |
if( (last!=current) || !lastBlockIsNE ) |
|
471 |
{ |
|
472 |
if( seenLand && (last != current) ) vertex = repeatLast(vertex,position,normal,texture); |
|
473 |
vertex= addFrontVertex( vertex, 0, vectZ, col, row, position, normal, texture); |
|
474 |
if( seenLand && (last != current) ) vertex = repeatLast(vertex,position,normal,texture); |
|
475 |
if( !lastBlockIsNE || (!front && !seenLand) ) vertex = repeatLast(vertex,position,normal,texture); |
|
476 |
vertex= addFrontVertex( vertex, 1, vectZ, col, row+1, position, normal, texture); |
|
477 |
} |
|
478 |
vertex= addFrontVertex( vertex, 2, vectZ, col+1, row, position, normal, texture); |
|
479 |
vertex= addFrontVertex( vertex, 3, vectZ, col+1, row+1, position, normal, texture); |
|
480 |
} |
|
481 |
else |
|
482 |
{ |
|
483 |
if( (last!=current) || lastBlockIsNE ) |
|
484 |
{ |
|
485 |
if( seenLand && (last != current) ) vertex = repeatLast(vertex,position,normal,texture); |
|
486 |
vertex= addFrontVertex( vertex, 1, vectZ, col, row+1, position, normal, texture); |
|
487 |
if( seenLand && (last != current) ) vertex = repeatLast(vertex,position,normal,texture); |
|
488 |
if( lastBlockIsNE || (!front && !seenLand) ) vertex = repeatLast(vertex,position,normal,texture); |
|
489 |
vertex= addFrontVertex( vertex, 0, vectZ, col, row, position, normal, texture); |
|
490 |
} |
|
491 |
vertex= addFrontVertex( vertex, 3, vectZ, col+1, row+1, position, normal, texture); |
|
492 |
vertex= addFrontVertex( vertex, 2, vectZ, col+1, row , position, normal, texture); |
|
496 | 493 |
} |
497 |
vertex= addFrontVertex( currentBlockIsNE ? NE:SE, vertex, vectZ, j, i, position, normal, texture); |
|
498 |
vertex= addFrontVertex( currentBlockIsNE ? SE:NE, vertex, vectZ, j, i, position, normal, texture); |
|
499 | 494 |
|
500 | 495 |
seenLand = true; |
501 | 496 |
lastBlockIsNE = currentBlockIsNE; |
... | ... | |
512 | 507 |
|
513 | 508 |
private int repeatLast(int vertex, float[] position, float[] normal, float[] texture) |
514 | 509 |
{ |
515 |
remainingVert--; |
|
516 |
|
|
517 | 510 |
//android.util.Log.e("CUBES", "repeating last vertex!"); |
518 | 511 |
|
519 | 512 |
if( vertex>0 ) |
520 | 513 |
{ |
514 |
remainingVert--; |
|
515 |
|
|
521 | 516 |
position[3*vertex ] = position[3*vertex-3]; |
522 | 517 |
position[3*vertex+1] = position[3*vertex-2]; |
523 | 518 |
position[3*vertex+2] = position[3*vertex-1]; |
... | ... | |
730 | 725 |
*/ |
731 | 726 |
public DistortedCubesGrid(int cols, String desc, boolean frontOnly) |
732 | 727 |
{ |
728 |
//android.util.Log.d("CUBES","calculating dataLength..."); |
|
729 |
|
|
733 | 730 |
prepareDataStructures(cols,desc,frontOnly); |
734 | 731 |
|
735 | 732 |
int numVertices=0; |
... | ... | |
737 | 734 |
float[] normalData = new float[NORMAL_DATA_SIZE *dataLength]; |
738 | 735 |
float[] textureData = new float[TEX_DATA_SIZE *dataLength]; |
739 | 736 |
|
737 |
//android.util.Log.d("CUBES","building front grid..."); |
|
738 |
|
|
740 | 739 |
numVertices = buildFrontBackGrid(true, numVertices,positionData,normalData,textureData); |
741 | 740 |
|
742 | 741 |
if( !frontOnly ) |
... | ... | |
748 | 747 |
|
749 | 748 |
numVertices = repeatLast(numVertices,positionData,normalData,textureData); |
750 | 749 |
} |
750 |
|
|
751 |
//android.util.Log.d("CUBES","building side grid..."); |
|
752 |
|
|
751 | 753 |
numVertices = buildSideGrid (numVertices,positionData,normalData,textureData); |
754 |
|
|
755 |
//android.util.Log.d("CUBES","building back grid..."); |
|
756 |
|
|
752 | 757 |
numVertices = buildFrontBackGrid (false,numVertices,positionData,normalData,textureData); |
753 | 758 |
} |
754 | 759 |
|
Also available in: Unified diff
Further simplify and speed up the DistortedCubes target.