Revision e54bfada
Added by Leszek Koltunski almost 4 years ago
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
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)