56 |
56 |
row = r;
|
57 |
57 |
col = c;
|
58 |
58 |
}
|
59 |
|
};
|
|
59 |
}
|
60 |
60 |
|
61 |
|
private int frontVert, sideVert;
|
62 |
61 |
private int mCols, mRows;
|
63 |
62 |
private short[][] mCubes;
|
64 |
|
private ArrayList<Edge> mEdges = new ArrayList<Edge>();
|
|
63 |
private ArrayList<Edge> mEdges = new ArrayList<>();
|
65 |
64 |
|
66 |
65 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
67 |
66 |
|
... | ... | |
103 |
102 |
while( curr.col!=startX || curr.row!=startY || curr.side!=startS );
|
104 |
103 |
}
|
105 |
104 |
|
106 |
|
frontVert = 2*( frontWalls + 2*frontSegments - 1);
|
107 |
|
sideVert = 2*( sideWalls + sideBends + edges -1);
|
|
105 |
int frontVert = 2*( frontWalls + 2*frontSegments - 1);
|
|
106 |
int sideVert = 2*( sideWalls + sideBends + edges -1);
|
108 |
107 |
|
109 |
108 |
int dataL = frontOnly ? frontVert : (frontVert+1) + (1+sideVert+1) + (1+frontVert);
|
110 |
109 |
|
... | ... | |
178 |
177 |
for(int i=reallen; i<len; i++) desc += "0";
|
179 |
178 |
}
|
180 |
179 |
|
181 |
|
if( desc.indexOf("1")>=0 )
|
|
180 |
if( desc.contains("1") )
|
182 |
181 |
{
|
183 |
182 |
mCols = cols;
|
184 |
183 |
mRows = len/cols;
|
... | ... | |
386 |
385 |
|
387 |
386 |
if( front ) // NW corner
|
388 |
387 |
{
|
389 |
|
position[3*vertex+0] = (centerX-0.5f)/mCols;
|
|
388 |
position[3*vertex ] = (centerX-0.5f)/mCols;
|
390 |
389 |
position[3*vertex+1] = (centerY+0.5f)/mRows;
|
391 |
390 |
position[3*vertex+2] = FRONTZ;
|
392 |
|
normal[3*vertex+0] = mNormalX[0];
|
|
391 |
normal[3*vertex ] = mNormalX[0];
|
393 |
392 |
normal[3*vertex+1] = mNormalY[0];
|
394 |
393 |
normal[3*vertex+2] = 1.0f;
|
395 |
|
texture[2*vertex+0] = (float)j/mCols;
|
|
394 |
texture[2*vertex ] = (float)j/mCols;
|
396 |
395 |
texture[2*vertex+1] = (float)i/mRows;
|
397 |
396 |
vertex++;
|
398 |
397 |
}
|
399 |
398 |
else // SW corner
|
400 |
399 |
{
|
401 |
|
position[3*vertex+0] = (centerX-0.5f)/mCols;
|
|
400 |
position[3*vertex ] = (centerX-0.5f)/mCols;
|
402 |
401 |
position[3*vertex+1] = (centerY-0.5f)/mRows;
|
403 |
402 |
position[3*vertex+2] = BACKZ;
|
404 |
|
normal[3*vertex+0] = mNormalX[1];
|
|
403 |
normal[3*vertex ] = mNormalX[1];
|
405 |
404 |
normal[3*vertex+1] = mNormalY[1];
|
406 |
405 |
normal[3*vertex+2] =-1.0f;
|
407 |
|
texture[2*vertex+0] = (float)j/mCols;
|
|
406 |
texture[2*vertex ] = (float)j/mCols;
|
408 |
407 |
texture[2*vertex+1] = (float)(i+1)/mRows;
|
409 |
408 |
vertex++;
|
410 |
409 |
|
... | ... | |
415 |
414 |
|
416 |
415 |
if( front ) // SW corner
|
417 |
416 |
{
|
418 |
|
position[3*vertex+0] = (centerX-0.5f)/mCols;
|
|
417 |
position[3*vertex ] = (centerX-0.5f)/mCols;
|
419 |
418 |
position[3*vertex+1] = (centerY-0.5f)/mRows;
|
420 |
419 |
position[3*vertex+2] = FRONTZ;
|
421 |
|
normal[3*vertex+0] = mNormalX[1];
|
|
420 |
normal[3*vertex ] = mNormalX[1];
|
422 |
421 |
normal[3*vertex+1] = mNormalY[1];
|
423 |
422 |
normal[3*vertex+2] = 1.0f;
|
424 |
|
texture[2*vertex+0] = (float)j/mCols;
|
|
423 |
texture[2*vertex ] = (float)j/mCols;
|
425 |
424 |
texture[2*vertex+1] = (float)(i+1)/mRows;
|
426 |
425 |
vertex++;
|
427 |
426 |
}
|
428 |
427 |
else // NW corner
|
429 |
428 |
{
|
430 |
|
position[3*vertex+0] = (centerX-0.5f)/mCols;
|
|
429 |
position[3*vertex ] = (centerX-0.5f)/mCols;
|
431 |
430 |
position[3*vertex+1] = (centerY+0.5f)/mRows;
|
432 |
431 |
position[3*vertex+2] = BACKZ;
|
433 |
|
normal[3*vertex+0] = mNormalX[0];
|
|
432 |
normal[3*vertex ] = mNormalX[0];
|
434 |
433 |
normal[3*vertex+1] = mNormalY[0];
|
435 |
434 |
normal[3*vertex+2] =-1.0f;
|
436 |
|
texture[2*vertex+0] = (float)j/mCols;
|
|
435 |
texture[2*vertex ] = (float)j/mCols;
|
437 |
436 |
texture[2*vertex+1] = (float)i/mRows;
|
438 |
437 |
vertex++;
|
439 |
438 |
}
|
... | ... | |
441 |
440 |
|
442 |
441 |
if( front ) // NE corner
|
443 |
442 |
{
|
444 |
|
position[3*vertex+0] = (centerX+0.5f)/mCols;
|
|
443 |
position[3*vertex ] = (centerX+0.5f)/mCols;
|
445 |
444 |
position[3*vertex+1] = (centerY+0.5f)/mRows;
|
446 |
445 |
position[3*vertex+2] = FRONTZ;
|
447 |
|
normal[3*vertex+0] = mNormalX[2];
|
|
446 |
normal[3*vertex ] = mNormalX[2];
|
448 |
447 |
normal[3*vertex+1] = mNormalY[2];
|
449 |
448 |
normal[3*vertex+2] = 1.0f;
|
450 |
|
texture[2*vertex+0] = (float)(j+1)/mCols;
|
|
449 |
texture[2*vertex ] = (float)(j+1)/mCols;
|
451 |
450 |
texture[2*vertex+1] = (float)i/mRows;
|
452 |
451 |
vertex++;
|
453 |
452 |
}
|
454 |
453 |
else // SE corner
|
455 |
454 |
{
|
456 |
|
position[3*vertex+0] = (centerX+0.5f)/mCols;
|
|
455 |
position[3*vertex ] = (centerX+0.5f)/mCols;
|
457 |
456 |
position[3*vertex+1] = (centerY-0.5f)/mRows;
|
458 |
457 |
position[3*vertex+2] = BACKZ;
|
459 |
|
normal[3*vertex+0] = mNormalX[3];
|
|
458 |
normal[3*vertex ] = mNormalX[3];
|
460 |
459 |
normal[3*vertex+1] = mNormalY[3];
|
461 |
460 |
normal[3*vertex+2] =-1.0f;
|
462 |
|
texture[2*vertex+0] = (float)(j+1)/mCols;
|
|
461 |
texture[2*vertex ] = (float)(j+1)/mCols;
|
463 |
462 |
texture[2*vertex+1] = (float)(i+1)/mRows;
|
464 |
463 |
vertex++;
|
465 |
464 |
}
|
466 |
465 |
|
467 |
466 |
if( front ) // SE corner
|
468 |
467 |
{
|
469 |
|
position[3*vertex+0] = (centerX+0.5f)/mCols;
|
|
468 |
position[3*vertex ] = (centerX+0.5f)/mCols;
|
470 |
469 |
position[3*vertex+1] = (centerY-0.5f)/mRows;
|
471 |
470 |
position[3*vertex+2] = FRONTZ;
|
472 |
|
normal[3*vertex+0] = mNormalX[3];
|
|
471 |
normal[3*vertex ] = mNormalX[3];
|
473 |
472 |
normal[3*vertex+1] = mNormalY[3];
|
474 |
473 |
normal[3*vertex+2] = 1.0f;
|
475 |
|
texture[2*vertex+0] = (float)(j+1)/mCols;
|
|
474 |
texture[2*vertex ] = (float)(j+1)/mCols;
|
476 |
475 |
texture[2*vertex+1] = (float)(i+1)/mRows;
|
477 |
476 |
vertex++;
|
478 |
477 |
}
|
479 |
478 |
else // NE corner
|
480 |
479 |
{
|
481 |
|
position[3*vertex+0] = (centerX+0.5f)/mCols;
|
|
480 |
position[3*vertex ] = (centerX+0.5f)/mCols;
|
482 |
481 |
position[3*vertex+1] = (centerY+0.5f)/mRows;
|
483 |
482 |
position[3*vertex+2] = BACKZ;
|
484 |
|
normal[3*vertex+0] = mNormalX[2];
|
|
483 |
normal[3*vertex ] = mNormalX[2];
|
485 |
484 |
normal[3*vertex+1] = mNormalY[2];
|
486 |
485 |
normal[3*vertex+2] =-1.0f;
|
487 |
|
texture[2*vertex+0] = (float)(j+1)/mCols;
|
|
486 |
texture[2*vertex ] = (float)(j+1)/mCols;
|
488 |
487 |
texture[2*vertex+1] = (float)i/mRows;
|
489 |
488 |
vertex++;
|
490 |
489 |
}
|
... | ... | |
505 |
504 |
{
|
506 |
505 |
if( vertex>0 )
|
507 |
506 |
{
|
508 |
|
position[3*vertex+0] = position[3*vertex-3];
|
|
507 |
position[3*vertex ] = position[3*vertex-3];
|
509 |
508 |
position[3*vertex+1] = position[3*vertex-2];
|
510 |
509 |
position[3*vertex+2] = position[3*vertex-1];
|
511 |
510 |
|
512 |
|
normal[3*vertex+0] = normal[3*vertex-3];
|
|
511 |
normal[3*vertex ] = normal[3*vertex-3];
|
513 |
512 |
normal[3*vertex+1] = normal[3*vertex-2];
|
514 |
513 |
normal[3*vertex+2] = normal[3*vertex-1];
|
515 |
514 |
|
516 |
|
texture[2*vertex+0] = texture[2*vertex-2];
|
|
515 |
texture[2*vertex ] = texture[2*vertex-2];
|
517 |
516 |
texture[2*vertex+1] = texture[2*vertex-1];
|
518 |
517 |
|
519 |
518 |
vertex++;
|
... | ... | |
646 |
645 |
|
647 |
646 |
switch(curr.side)
|
648 |
647 |
{
|
649 |
|
case NORTH: position[3*vertex+0] = (back ? (centerX-0.5f) : (centerX+0.5f))/mCols;
|
|
648 |
case NORTH: position[3*vertex ] = (back ? (centerX-0.5f) : (centerX+0.5f))/mCols;
|
650 |
649 |
position[3*vertex+1] = (centerY+0.5f)/mRows;
|
651 |
650 |
position[3*vertex+2] = lower ? BACKZ : FRONTZ;
|
652 |
651 |
|
653 |
|
normal[3*vertex+0] = side==NORTH ? 0.0f : (side==WEST?-R:R);
|
|
652 |
normal[3*vertex ] = side==NORTH ? 0.0f : (side==WEST?-R:R);
|
654 |
653 |
normal[3*vertex+1] = 1.0f;
|
655 |
654 |
normal[3*vertex+2] = lower ? -R:R;
|
656 |
655 |
|
657 |
|
texture[2*vertex+0] = (float)(back ? (curr.col ):(curr.col+1))/mCols;
|
|
656 |
texture[2*vertex ] = (float)(back ? (curr.col ):(curr.col+1))/mCols;
|
658 |
657 |
texture[2*vertex+1] = (float)(lower? (curr.row-1):(curr.row ))/mRows;
|
659 |
658 |
break;
|
660 |
|
case SOUTH: position[3*vertex+0] = (back ? (centerX+0.5f) : (centerX-0.5f))/mCols;
|
|
659 |
case SOUTH: position[3*vertex ] = (back ? (centerX+0.5f) : (centerX-0.5f))/mCols;
|
661 |
660 |
position[3*vertex+1] = (centerY-0.5f)/mRows;
|
662 |
661 |
position[3*vertex+2] = lower ? BACKZ : FRONTZ;
|
663 |
662 |
|
664 |
|
normal[3*vertex+0] = side==SOUTH ? 0.0f: (side==EAST?-R:R);
|
|
663 |
normal[3*vertex ] = side==SOUTH ? 0.0f: (side==EAST?-R:R);
|
665 |
664 |
normal[3*vertex+1] =-1.0f;
|
666 |
665 |
normal[3*vertex+2] = lower ? -R:R;
|
667 |
666 |
|
668 |
|
texture[2*vertex+0] = (float)(back ? (curr.col+1):(curr.col ))/mCols;
|
|
667 |
texture[2*vertex ] = (float)(back ? (curr.col+1):(curr.col ))/mCols;
|
669 |
668 |
texture[2*vertex+1] = (float)(lower? (curr.row+2):(curr.row+1))/mRows;
|
670 |
669 |
break;
|
671 |
|
case WEST : position[3*vertex+0] = (centerX-0.5f)/mCols;
|
|
670 |
case WEST : position[3*vertex ] = (centerX-0.5f)/mCols;
|
672 |
671 |
position[3*vertex+1] = (back ? (centerY-0.5f):(centerY+0.5f))/mRows;
|
673 |
672 |
position[3*vertex+2] = lower ? BACKZ : FRONTZ;
|
674 |
673 |
|
675 |
|
normal[3*vertex+0] =-1.0f;
|
|
674 |
normal[3*vertex ] =-1.0f;
|
676 |
675 |
normal[3*vertex+1] = side==WEST ? 0.0f : (side==NORTH?-R:R);
|
677 |
676 |
normal[3*vertex+2] = lower ? -R:R;
|
678 |
677 |
|
679 |
|
texture[2*vertex+0] = (float)(lower ? (curr.col-1):(curr.col ))/mCols;
|
|
678 |
texture[2*vertex ] = (float)(lower ? (curr.col-1):(curr.col ))/mCols;
|
680 |
679 |
texture[2*vertex+1] = (float)(back ? (curr.row+1):(curr.row ))/mRows;
|
681 |
680 |
break;
|
682 |
|
case EAST : position[3*vertex+0] = (centerX+0.5f)/mCols;
|
|
681 |
case EAST : position[3*vertex ] = (centerX+0.5f)/mCols;
|
683 |
682 |
position[3*vertex+1] = (back ? (centerY+0.5f):(centerY-0.5f))/mRows;
|
684 |
683 |
position[3*vertex+2] = lower ? BACKZ : FRONTZ;
|
685 |
684 |
|
686 |
|
normal[3*vertex+0] = 1.0f;
|
|
685 |
normal[3*vertex ] = 1.0f;
|
687 |
686 |
normal[3*vertex+1] = side==EAST ? 0.0f : (side==SOUTH?-R:R);
|
688 |
687 |
normal[3*vertex+2] = lower ? -R:R;
|
689 |
688 |
|
690 |
|
texture[2*vertex+0] = (float)(lower ? (curr.col+2):(curr.col+1))/mCols;
|
|
689 |
texture[2*vertex ] = (float)(lower ? (curr.col+2):(curr.col+1))/mCols;
|
691 |
690 |
texture[2*vertex+1] = (float)(back ? (curr.row ):(curr.row+1))/mRows;
|
692 |
691 |
break;
|
693 |
692 |
}
|
694 |
693 |
|
695 |
|
if(texture[2*vertex+0]>1.0f) texture[2*vertex+0] =2.0f-texture[2*vertex+0];
|
696 |
|
if(texture[2*vertex+0]<0.0f) texture[2*vertex+0] = -texture[2*vertex+0];
|
|
694 |
if(texture[2*vertex ]>1.0f) texture[2*vertex ] =2.0f-texture[2*vertex ];
|
|
695 |
if(texture[2*vertex ]<0.0f) texture[2*vertex ] = -texture[2*vertex ];
|
697 |
696 |
if(texture[2*vertex+1]>1.0f) texture[2*vertex+1] =2.0f-texture[2*vertex+1];
|
698 |
697 |
if(texture[2*vertex+1]<0.0f) texture[2*vertex+1] = -texture[2*vertex+1];
|
699 |
698 |
}
|
... | ... | |
705 |
704 |
/**
|
706 |
705 |
* Creates the underlying grid of vertices, normals, texture coords and colors.
|
707 |
706 |
*
|
708 |
|
* @param rows See {@link DistortedCubes#DistortedCubes(String)}
|
709 |
|
* @param desc See {@link DistortedCubes#DistortedCubes(String)}
|
|
707 |
* @param cols See {@link DistortedCubes#DistortedCubes(int,String,int,boolean)}
|
|
708 |
* @param desc See {@link DistortedCubes#DistortedCubes(int,String,int,boolean)}
|
|
709 |
* @param frontOnly See {@link DistortedCubes#DistortedCubes(int,String,int,boolean)}
|
710 |
710 |
*/
|
711 |
711 |
public DistortedCubesGrid(int cols, String desc, boolean frontOnly)
|
712 |
712 |
{
|
... | ... | |
720 |
720 |
|
721 |
721 |
for(int i=0; i<dataLength; i++)
|
722 |
722 |
{
|
723 |
|
colorData[COLOR_DATA_SIZE*i+0] = 1.0f; // r
|
|
723 |
colorData[COLOR_DATA_SIZE*i ] = 1.0f; // r
|
724 |
724 |
colorData[COLOR_DATA_SIZE*i+1] = 1.0f; // g
|
725 |
725 |
colorData[COLOR_DATA_SIZE*i+2] = 1.0f; // b
|
726 |
726 |
colorData[COLOR_DATA_SIZE*i+3] = 1.0f; // a
|
Minor: deal with IntelliJ warnings