Revision 63fb0859
Added by Leszek Koltunski almost 5 years ago
| src/main/java/org/distorted/examples/meshfile/FactoryCubit.java | ||
|---|---|---|
| 196 | 196 | } | 
| 197 | 197 |  | 
| 198 | 198 | /////////////////////////////////////////////////////////////////////////////////////////////////// | 
| 199 | // Compute (rx,ry) - coords of a point which is the result of rotation by angle 'angle' of the point
 | |
| 200 | // (px,py) along axis Z. Center of rotation: (cx,cy). | |
| 199 | // Compute (rx,ry) - coords of a point which is the result of rotation by angle 'radians' of the point
 | |
| 200 | // (px,py) along axis Z. Center of rotation: (cx,cy). Rotation is counterclockwise!
 | |
| 201 | 201 | // Write (rx,ry) to array[index] and array[index+1]. | 
| 202 | 202 |  | 
| 203 |   private void writeVertex( float cx, float cy, float px, float py, float angle, float[] array, int index)
 | |
| 203 |   private void writeVertex( float cx, float cy, float px, float py, float radians, float[] array, int index)
 | |
| 204 | 204 |     {
 | 
| 205 | 205 | float vx = px-cx; | 
| 206 | 206 | float vy = py-cy; | 
| 207 | 207 |  | 
| 208 | double radAngle = Math.PI*angle/180; | |
| 209 | float sinA = (float)Math.sin(radAngle); | |
| 210 | float cosA = (float)Math.cos(radAngle); | |
| 208 | float sinA = (float)Math.sin(radians); | |
| 209 | float cosA = (float)Math.cos(radians); | |
| 211 | 210 |  | 
| 212 |     float rvx = vx*cosA +vy*sinA;
 | |
| 213 |     float rvy =-vx*sinA +vy*cosA;
 | |
| 211 |     float rvx = vx*cosA - vy*sinA;
 | |
| 212 |     float rvy = vx*sinA + vy*cosA;
 | |
| 214 | 213 |  | 
| 215 | 214 | array[index ] = rvx + cx; | 
| 216 | 215 | array[index+1] = rvy + cy; | 
| ... | ... | |
| 610 | 609 |  | 
| 611 | 610 | final float angle = (float)Math.PI/(6*REX_N); | 
| 612 | 611 | float[] vertices = new float[6*REX_N]; | 
| 613 | final float H = SQ2*(SQ3/3 - 0.5f); | |
| 614 | 612 | final float D = 0.5f - REX_D; | 
| 615 |     final float F = H*D;
 | |
| 616 |     final float B = (float)Math.sqrt(12/(H*H) - 0.75f) - 0.5f;
 | |
| 613 |     final float F = D*SQ2*(SQ3-1);
 | |
| 614 |     final float B = 2.5f;
 | |
| 617 | 615 |  | 
| 618 | 616 | final float V1x = -F*0.5f; | 
| 619 | 617 | final float V1y = -F*SQ3/6; | 
| ... | ... | |
| 623 | 621 | final float V3y = -2*V1y; | 
| 624 | 622 |  | 
| 625 | 623 | final float C1x = 0.0f; | 
| 626 |     final float C1y = -D*( (SQ3/6)*H - (float)Math.sqrt(4.0f-0.25f*H*H) );
 | |
| 627 |     final float C2x = B*V2x;
 | |
| 628 |     final float C2y = B*V2y;
 | |
| 629 |     final float C3x = B*V3x;
 | |
| 630 |     final float C3y = B*V3y;
 | |
| 624 |     final float C1y = -F*(1+2*SQ3/3);
 | |
| 625 |     final float C2x = B*V1x;
 | |
| 626 |     final float C2y = B*V1y;
 | |
| 627 |     final float C3x = B*V2x;
 | |
| 628 |     final float C3y = B*V2y;
 | |
| 631 | 629 |  | 
| 632 | 630 | for(int i=0; i<REX_N; i++) | 
| 633 | 631 |       {
 | 
| 634 |       writeVertex(C1x,C1y,V1x,V1y, i*angle, vertices, 2*i          );
 | |
| 632 |       writeVertex(C1x,C1y,V1x,V1y,-i*angle, vertices, 2*i          );
 | |
| 635 | 633 | writeVertex(C2x,C2y,V2x,V2y, i*angle, vertices, 2*i + 2*REX_N); | 
| 636 | 634 | writeVertex(C3x,C3y,V3x,V3y, i*angle, vertices, 2*i + 4*REX_N); | 
| 637 | 635 | } | 
| 638 | 636 |  | 
| 639 |     float[] bands0 = computeBands(+0.03f,35,0.5f,0.5f,5);
 | |
| 637 |     float[] bands0 = computeBands(+0.02f,10,0.5f,0.5f,5);
 | |
| 640 | 638 | float[] bands1 = computeBands(-0.00f,45,0.5f,0.0f,2); | 
| 641 | 639 |  | 
| 642 | 640 | meshes[0] = new MeshPolygon(vertices,bands0,1,1); | 
| ... | ... | |
| 655 | 653 |  | 
| 656 | 654 | final float angle = (float)Math.PI/(6*REX_N); | 
| 657 | 655 | float[] vertices = new float[8*REX_N]; | 
| 658 | final float H = SQ3/2 - 0.5f; | |
| 659 | 656 | final float D = 0.5f - REX_D; | 
| 660 |     final float F = H*D;
 | |
| 657 |     final float F = D*(SQ3-1);
 | |
| 661 | 658 |  | 
| 662 | 659 | final float V1x = 0.0f; | 
| 663 | 660 | final float V1y = +F; | 
| 664 |     final float V2x = +F;
 | |
| 661 |     final float V2x = -F;
 | |
| 665 | 662 | final float V2y = 0.0f; | 
| 666 | 663 | final float V3x = 0.0f; | 
| 667 | 664 | final float V3y = -F; | 
| 668 |     final float V4x = -F;
 | |
| 665 |     final float V4x = +F;
 | |
| 669 | 666 | final float V4y = 0.0f; | 
| 670 | 667 |  | 
| 671 |     final float C1x = -D;
 | |
| 668 |     final float C1x = +D;
 | |
| 672 | 669 | final float C1y = -D; | 
| 673 |     final float C2x = -D;
 | |
| 670 |     final float C2x = +D;
 | |
| 674 | 671 | final float C2y = +D; | 
| 675 |     final float C3x = +D;
 | |
| 672 |     final float C3x = -D;
 | |
| 676 | 673 | final float C3y = +D; | 
| 677 |     final float C4x = +D;
 | |
| 674 |     final float C4x = -D;
 | |
| 678 | 675 | final float C4y = -D; | 
| 679 | 676 |  | 
| 680 | 677 | for(int i=0; i<REX_N; i++) | 
| ... | ... | |
| 685 | 682 | writeVertex(C4x,C4y,V4x,V4y, i*angle, vertices, 2*i + 6*REX_N); | 
| 686 | 683 | } | 
| 687 | 684 |  | 
| 688 |     float[] bands0 = computeBands(+0.03f,35,0.5f,0.5f,5);
 | |
| 685 |     float[] bands0 = computeBands(+0.02f,10,0.5f,0.5f,5);
 | |
| 689 | 686 | float[] bands1 = computeBands(-0.00f,45,0.5f,0.0f,2); | 
| 690 | 687 |  | 
| 691 | 688 | meshes[0] = new MeshPolygon(vertices,bands0,0,0); | 
| ... | ... | |
| 700 | 697 |  | 
| 701 | 698 | MeshBase createFacesRexEdge() | 
| 702 | 699 |     {
 | 
| 703 |     MeshBase[] meshes = new MeshBase[4];
 | |
| 700 |     MeshBase[] meshes = new MeshBase[1];
 | |
| 704 | 701 |  | 
| 705 | 702 | final float angle = (float)Math.PI/(6*REX_N); | 
| 706 |     float[] vertices = new float[4*REX_N + 4];
 | |
| 703 |     float[] vertices = new float[4*REX_N + 6];
 | |
| 707 | 704 | final float H = 1.0f - SQ3/2; | 
| 708 | 705 | final float D = 0.5f - REX_D; | 
| 709 |     final float F = H*D;
 | |
| 706 |     final float F = 0.5f*H;
 | |
| 710 | 707 |  | 
| 711 | 708 | final float V1x = -D; | 
| 712 |     final float V1y = +D - D*SQ3/2;
 | |
| 709 |     final float V1y = +D + F - 0.5f;
 | |
| 713 | 710 | final float V2x = 0.0f; | 
| 714 |     final float V2y = D*(SQ3-1) - D*SQ3/2;
 | |
| 711 |     final float V2y = -F;
 | |
| 715 | 712 |  | 
| 716 | 713 | final float C1x = -D; | 
| 717 |     final float C1y = -D - D*SQ3/2;
 | |
| 714 |     final float C1y = -D + F - 0.5f;
 | |
| 718 | 715 | final float C2x = +D; | 
| 719 | 716 | final float C2y = C1y; | 
| 720 | 717 |  | 
| 721 | 718 | for(int i=0; i<REX_N; i++) | 
| 722 | 719 |       {
 | 
| 723 |       writeVertex(C1x,C1y,V1x,V1y, i*angle, vertices, 2*i          );
 | |
| 724 |       writeVertex(C2x,C2y,V2x,V2y, i*angle, vertices, 2*i + 2*REX_N);
 | |
| 720 |       writeVertex(C1x,C1y,V1x,V1y,-i*angle, vertices, 2*i          );
 | |
| 721 |       writeVertex(C2x,C2y,V2x,V2y,-i*angle, vertices, 2*i + 2*REX_N);
 | |
| 725 | 722 | } | 
| 726 | 723 |  | 
| 727 | 724 | vertices[4*REX_N ] = +D; | 
| 728 | vertices[4*REX_N+1] = +F + REX_D; | |
| 729 | vertices[4*REX_N+2] = -D; | |
| 730 | vertices[4*REX_N+3] = +F + REX_D; | |
| 731 |  | |
| 732 | float[] bands0 = computeBands(+0.03f,35,0.5f,0.5f,5); | |
| 733 | float[] bands1 = computeBands(-0.00f,45,0.5f,0.0f,2); | |
| 725 | vertices[4*REX_N+1] = +F-REX_D; | |
| 726 | vertices[4*REX_N+2] = +D; | |
| 727 | vertices[4*REX_N+3] = +F; | |
| 728 | vertices[4*REX_N+4] = -D; | |
| 729 | vertices[4*REX_N+5] = +F; | |
| 730 |  | |
| 731 | /* | |
| 732 | vertices[0] = V1x; | |
| 733 | vertices[1] = V1y; | |
| 734 | vertices[2] = V2x; | |
| 735 | vertices[3] = V2y; | |
| 736 | vertices[4] = +D; | |
| 737 | vertices[5] = +F-REX_D; | |
| 738 | vertices[6] = +D; | |
| 739 | vertices[7] = +F; | |
| 740 | vertices[8] = -D; | |
| 741 | vertices[9] = +F; | |
| 742 | */ | |
| 743 | float[] bands0 = computeBands(+0.02f, 9,0.5f,0.5f,5); | |
| 744 | float[] bands1 = computeBands( 0.00f,45,0.5f,0.0f,2); | |
| 734 | 745 |  | 
| 735 | 746 | meshes[0] = new MeshPolygon(vertices,bands0,1,2); | 
| 736 | 747 | meshes[0].setEffectAssociation(0,1,0); | 
| 748 | /* | |
| 737 | 749 | meshes[1] = meshes[0].copy(true); | 
| 738 | 750 | meshes[1].setEffectAssociation(0,2,0); | 
| 739 | 751 | meshes[2] = new MeshPolygon(vertices,bands1,0,0); | 
| 740 | 752 | meshes[2].setEffectAssociation(0,4,0); | 
| 741 | 753 | meshes[3] = meshes[2].copy(true); | 
| 742 | 754 | meshes[3].setEffectAssociation(0,8,0); | 
| 743 |  | |
| 755 | */ | |
| 744 | 756 | return new MeshJoined(meshes); | 
| 745 | 757 | } | 
| 746 | 758 |  | 
Also available in: Unified diff
Fixes for the Rex Cube (mostly works now)