Revision 6a96e571
Added by Leszek Koltunski over 4 years ago
| src/main/java/org/distorted/examples/meshfile/FactoryCubit.java | ||
|---|---|---|
| 19 | 19 |
|
| 20 | 20 |
package org.distorted.examples.meshfile; |
| 21 | 21 |
|
| 22 |
import org.distorted.library.effect.MatrixEffect; |
|
| 23 | 22 |
import org.distorted.library.effect.MatrixEffectMove; |
| 24 | 23 |
import org.distorted.library.effect.MatrixEffectQuaternion; |
| 25 | 24 |
import org.distorted.library.effect.MatrixEffectScale; |
| ... | ... | |
| 50 | 49 |
private static class StickerInfo |
| 51 | 50 |
{
|
| 52 | 51 |
double[] vertices; |
| 52 |
double dx,dy; |
|
| 53 | 53 |
} |
| 54 | 54 |
|
| 55 | 55 |
private static class FaceInfo |
| ... | ... | |
| 607 | 607 |
return ret; |
| 608 | 608 |
} |
| 609 | 609 |
|
| 610 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 611 |
|
|
| 612 |
private void centerTextures() |
|
| 613 |
{
|
|
| 614 |
int numStickers = mStickerInfo.size(); |
|
| 615 |
StickerInfo info; |
|
| 616 |
|
|
| 617 |
for(int sticker=0; sticker<numStickers; sticker++) |
|
| 618 |
{
|
|
| 619 |
double minX = Double.MAX_VALUE; |
|
| 620 |
double minY = Double.MAX_VALUE; |
|
| 621 |
double maxX =-Double.MAX_VALUE; |
|
| 622 |
double maxY =-Double.MAX_VALUE; |
|
| 623 |
|
|
| 624 |
info = mStickerInfo.get(sticker); |
|
| 625 |
double[] vert = info.vertices; |
|
| 626 |
int numVert = vert.length/2; |
|
| 627 |
|
|
| 628 |
for ( int v=0; v<numVert; v++) |
|
| 629 |
{
|
|
| 630 |
double x = vert[2*v ]; |
|
| 631 |
double y = vert[2*v+1]; |
|
| 632 |
|
|
| 633 |
if (x < minX) minX = x; |
|
| 634 |
if (y < minY) minY = y; |
|
| 635 |
if (x > maxX) maxX = x; |
|
| 636 |
if (y > maxY) maxY = y; |
|
| 637 |
} |
|
| 638 |
|
|
| 639 |
info.dx = info.dy = 0.0; |
|
| 640 |
|
|
| 641 |
if( minX<-0.5 ) info.dx = minX + 0.5; |
|
| 642 |
if( minY<-0.5 ) info.dy = minY + 0.5; |
|
| 643 |
if( maxX> 0.5 ) info.dx = maxX - 0.5; |
|
| 644 |
if( maxY> 0.5 ) info.dy = maxY - 0.5; |
|
| 645 |
|
|
| 646 |
for ( int v=0; v<numVert; v++) |
|
| 647 |
{
|
|
| 648 |
vert[2*v ] -= info.dx; |
|
| 649 |
vert[2*v+1] -= info.dy; |
|
| 650 |
} |
|
| 651 |
} |
|
| 652 |
} |
|
| 653 |
|
|
| 610 | 654 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 611 | 655 |
|
| 612 | 656 |
private void prepareFaceInfo( final double[][] vertices, final int[][] indexes) |
| ... | ... | |
| 632 | 676 |
|
| 633 | 677 |
mFaceInfo.add(newInfo); |
| 634 | 678 |
} |
| 679 |
|
|
| 680 |
centerTextures(); |
|
| 635 | 681 |
} |
| 636 | 682 |
|
| 637 | 683 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| ... | ... | |
| 736 | 782 |
final float[][] bands , final int[] bandIndexes, |
| 737 | 783 |
final float[][] corners , final int[] cornerIndexes) |
| 738 | 784 |
{
|
| 739 |
int EFFECTS_PER_FACE = 3; |
|
| 740 |
|
|
| 741 | 785 |
prepareFaceInfo(vertices,vertIndexes); |
| 742 | 786 |
|
| 743 | 787 |
int numFaces = vertIndexes.length; |
| ... | ... | |
| 765 | 809 |
} |
| 766 | 810 |
|
| 767 | 811 |
MeshBase mesh = new MeshJoined(meshes); |
| 768 |
MatrixEffect[] effects = new MatrixEffect[EFFECTS_PER_FACE*numFaces]; |
|
| 769 | 812 |
Static3D center = new Static3D(0,0,0); |
| 770 | 813 |
|
| 771 | 814 |
for(int face=0; face<numFaces; face++) |
| 772 | 815 |
{
|
| 773 | 816 |
int assoc = (1<<face); |
| 774 | 817 |
fInfo = mFaceInfo.get(face); |
| 818 |
sInfo = mStickerInfo.get(fInfo.sticker); |
|
| 775 | 819 |
|
| 820 |
float dx = (float)sInfo.dx; |
|
| 821 |
float dy = (float)sInfo.dy; |
|
| 776 | 822 |
float vx = (float)fInfo.vx; |
| 777 | 823 |
float vy = (float)fInfo.vy; |
| 778 | 824 |
float vz = (float)fInfo.vz; |
| ... | ... | |
| 782 | 828 |
float qz = (float)fInfo.qz; |
| 783 | 829 |
float qw = (float)fInfo.qw; |
| 784 | 830 |
|
| 831 |
Static3D move2D= new Static3D(dx,dy,0.0f); |
|
| 785 | 832 |
Static3D move3D= new Static3D(vx,vy,vz); |
| 786 | 833 |
Static3D scale = new Static3D(sc,sc, fInfo.flip ? -sc : sc); |
| 787 | 834 |
Static4D quat = new Static4D(qx,qy,qz,qw); |
| 788 | 835 |
|
| 789 |
effects[EFFECTS_PER_FACE*face ] = new MatrixEffectScale(scale); |
|
| 790 |
effects[EFFECTS_PER_FACE*face+1] = new MatrixEffectQuaternion(quat,center); |
|
| 791 |
effects[EFFECTS_PER_FACE*face+2] = new MatrixEffectMove(move3D); |
|
| 792 |
|
|
| 793 |
mesh.apply(effects[EFFECTS_PER_FACE*face ],assoc,-1); |
|
| 794 |
mesh.apply(effects[EFFECTS_PER_FACE*face+1],assoc,-1); |
|
| 795 |
mesh.apply(effects[EFFECTS_PER_FACE*face+2],assoc,-1); |
|
| 836 |
mesh.apply(new MatrixEffectMove(move2D) ,assoc,-1); |
|
| 837 |
mesh.apply(new MatrixEffectScale(scale) ,assoc,-1); |
|
| 838 |
mesh.apply(new MatrixEffectQuaternion(quat,center),assoc,-1); |
|
| 839 |
mesh.apply(new MatrixEffectMove(move3D) ,assoc,-1); |
|
| 796 | 840 |
} |
| 797 | 841 |
|
| 798 | 842 |
prepareAndRoundCorners(mesh, vertices, vertIndexes, corners, cornerIndexes); |
| src/main/java/org/distorted/examples/meshfile/MeshFileRenderer.java | ||
|---|---|---|
| 252 | 252 |
|
| 253 | 253 |
private void createMesh() |
| 254 | 254 |
{
|
| 255 |
int mode = 2;
|
|
| 255 |
int mode = 0;
|
|
| 256 | 256 |
double[][] vertices = null; |
| 257 | 257 |
int[][] vertIndexes = null; |
| 258 | 258 |
float[][] bands = null; |
| ... | ... | |
| 288 | 288 |
|
| 289 | 289 |
bands = new float[][] |
| 290 | 290 |
{
|
| 291 |
{0.05f,45,0.6f,0.5f,5, 2,2}
|
|
| 291 |
{0.05f,40,0.5f,0.2f,5, 2,2}
|
|
| 292 | 292 |
}; |
| 293 | 293 |
|
| 294 | 294 |
bandIndexes = new int[] { 0,0,0,0,0,0 };
|
| ... | ... | |
| 358 | 358 |
|
| 359 | 359 |
bands = new float[][] |
| 360 | 360 |
{
|
| 361 |
{0.028f,30,0.166f,0.8f,7, 2,5},
|
|
| 362 |
{0.028f,30,0.166f,0.8f,7, 1,2}
|
|
| 361 |
{0.028f,30,0.25f,0.1f,7, 2,5},
|
|
| 362 |
{0.001f,30,0.25f,0.1f,7, 1,2}
|
|
| 363 | 363 |
}; |
| 364 | 364 |
|
| 365 | 365 |
bandIndexes = new int[] { 0,1,1,0 };
|
| ... | ... | |
| 372 | 372 |
cornerIndexes = new int[] { 0,0,0,0 };
|
| 373 | 373 |
} |
| 374 | 374 |
|
| 375 |
///// OCTAHEDRON //////////////////////////////////////////////////////////////////////////// |
|
| 376 |
|
|
| 377 |
else if( mode==3 ) |
|
| 378 |
{
|
|
| 379 |
vertices = new double[][] |
|
| 380 |
{
|
|
| 381 |
{ 0.5, 0.0, 0.5},
|
|
| 382 |
{ 0.5, 0.0,-0.5},
|
|
| 383 |
{-0.5, 0.0,-0.5},
|
|
| 384 |
{-0.5, 0.0, 0.5},
|
|
| 385 |
{ 0.0, SQ2/2, 0.0},
|
|
| 386 |
{ 0.0,-SQ2/2, 0.0},
|
|
| 387 |
}; |
|
| 388 |
|
|
| 389 |
vertIndexes = new int[][] |
|
| 390 |
{
|
|
| 391 |
{3,0,4}, // counterclockwise!
|
|
| 392 |
{0,1,4},
|
|
| 393 |
{1,2,4},
|
|
| 394 |
{2,3,4},
|
|
| 395 |
{5,0,3},
|
|
| 396 |
{5,1,0},
|
|
| 397 |
{5,2,1},
|
|
| 398 |
{5,3,2}
|
|
| 399 |
}; |
|
| 400 |
|
|
| 401 |
bands = new float[][] |
|
| 402 |
{
|
|
| 403 |
{0.05f,17,0.5f,0.2f,5, 2,2}
|
|
| 404 |
}; |
|
| 405 |
|
|
| 406 |
bandIndexes = new int[] { 0,0,0,0,0,0,0,0 };
|
|
| 407 |
|
|
| 408 |
corners = new float[][] |
|
| 409 |
{
|
|
| 410 |
{ 0.03f, 0.12f }
|
|
| 411 |
}; |
|
| 412 |
|
|
| 413 |
cornerIndexes = new int[] { 0,0,0,0,0,0 };
|
|
| 414 |
} |
|
| 415 |
|
|
| 375 | 416 |
FactoryCubit factory = FactoryCubit.getInstance(); |
| 376 | 417 |
mMesh = factory.createRoundedSolid(vertices, vertIndexes, bands, bandIndexes, corners, cornerIndexes); |
| 377 | 418 |
|
Also available in: Unified diff
Cubit creation: center the textures. Add octahedron.