Project

General

Profile

« Previous | Next » 

Revision 0919eba7

Added by Leszek Koltunski about 3 years ago

Correct still one bug with collapsing stickers in teh new Cubit engine.
Convert the Helicopter corner cubits to the new engine.

View differences:

src/main/java/org/distorted/helpers/FactoryCubit.java
238 238
      }
239 239
    }
240 240

  
241
///////////////////////////////////////////////////////////////////////////////////////////////////
242

  
243
  MeshBase createFacesHelicopterCorner()
244
    {
245
    MeshBase[] meshes = new MeshBase[6];
246

  
247
    float E = 0.5f;
248
    float F = SQ2/4;
249
    float G = 1.0f/12;
250
    float[] vertices0 = { -E+E/4,E/4, E/4,-E+E/4, E/4,E/4};
251
    float[] bands0 = computeBands(0.028f,35,E/4,0.7f,7);
252

  
253
    meshes[0] = new MeshPolygon(vertices0, bands0, 3, 3);
254
    meshes[0].setEffectAssociation(0,1,0);
255
    meshes[1] = meshes[0].copy(true);
256
    meshes[1].setEffectAssociation(0,2,0);
257
    meshes[2] = meshes[0].copy(true);
258
    meshes[2].setEffectAssociation(0,4,0);
259

  
260
    float[] vertices1 = { -F,-G, 0,-G, +F,-G, 0,2*G };
261
    float[] bands1 = computeBands(0.00f,0,0,0.0f,3);
262
    meshes[3] = new MeshPolygon(vertices1,bands1,1,5);
263
    meshes[3].setEffectAssociation(0,8,0);
264
    meshes[4] = meshes[3].copy(true);
265
    meshes[4].setEffectAssociation(0,16,0);
266
    meshes[5] = meshes[3].copy(true);
267
    meshes[5].setEffectAssociation(0,32,0);
268

  
269
    return new MeshJoined(meshes);
270
    }
271

  
272 241
///////////////////////////////////////////////////////////////////////////////////////////////////
273 242

  
274 243
  MeshBase createFacesHelicopterFace()
......
753 722

  
754 723
///////////////////////////////////////////////////////////////////////////////////////////////////
755 724
// EFFECTS
756
///////////////////////////////////////////////////////////////////////////////////////////////////
757

  
758
  VertexEffect[] createVertexEffectsHelicopterCorner()
759
    {
760
    float E = 0.5f;
761

  
762
    Static3D axisX  = new Static3D(1,0,0);
763
    Static3D axisY  = new Static3D(0,1,0);
764
    Static3D axis0  = new Static3D(-SQ2/2,0,SQ2/2);
765
    Static3D axis1  = new Static3D(+SQ3/3,+SQ3/3,+SQ3/3);
766
    Static1D angle1 = new Static1D(+90);
767
    Static1D angle2 = new Static1D(-90);
768
    Static1D angle3 = new Static1D(-135);
769
    Static1D angle4 = new Static1D(90);
770
    Static1D angle5 = new Static1D(120);
771
    Static1D angle6 = new Static1D(240);
772
    Static3D center1= new Static3D(0,0,0);
773
    Static3D center2= new Static3D(-0.25f,-0.25f,-0.25f);
774
    Static3D move1  = new Static3D(-E/4,-E/4,0);
775
    Static3D move2  = new Static3D(-0.25f,(-1.0f/6)-0.25f,-0.25f);
776

  
777
    VertexEffect[] effect = new VertexEffect[10];
778

  
779
    effect[0] = new VertexEffectMove(move1);
780
    effect[1] = new VertexEffectScale(new Static3D(1,1,-1));
781
    effect[2] = new VertexEffectRotate(angle1,axisX,center1);
782
    effect[3] = new VertexEffectRotate(angle2,axisY,center1);
783
    effect[4] = new VertexEffectMove(move2);
784
    effect[5] = new VertexEffectRotate(angle1,axisX,center2);
785
    effect[6] = new VertexEffectRotate(angle3,axisY,center2);
786
    effect[7] = new VertexEffectRotate(angle4,axis0,center2);
787
    effect[8] = new VertexEffectRotate(angle5,axis1,center2);
788
    effect[9] = new VertexEffectRotate(angle6,axis1,center2);
789

  
790
    effect[0].setMeshAssociation( 7,-1);  // meshes 0,1,2
791
    effect[1].setMeshAssociation( 6,-1);  // meshes 1,2
792
    effect[2].setMeshAssociation( 2,-1);  // mesh 1
793
    effect[3].setMeshAssociation( 4,-1);  // mesh 2
794
    effect[4].setMeshAssociation(56,-1);  // meshes 3,4,5
795
    effect[5].setMeshAssociation(56,-1);  // meshes 3,4,5
796
    effect[6].setMeshAssociation(56,-1);  // meshes 3,4,5
797
    effect[7].setMeshAssociation(56,-1);  // meshes 3,4,5
798
    effect[8].setMeshAssociation(16,-1);  // mesh 4
799
    effect[9].setMeshAssociation(32,-1);  // mesh 5
800

  
801
    return effect;
802
    }
803

  
804 725
///////////////////////////////////////////////////////////////////////////////////////////////////
805 726

  
806 727
  VertexEffect[] createVertexEffectsHelicopterFace()
......
1329 1250
// OBJECTS
1330 1251
///////////////////////////////////////////////////////////////////////////////////////////////////
1331 1252

  
1332

  
1333
///////////////////////////////////////////////////////////////////////////////////////////////////
1334
// Helicopter
1335

  
1336
  public MeshBase createHelicopterCornerMesh()
1337
    {
1338
    MeshBase mesh = createFacesHelicopterCorner();
1339
    VertexEffect[] effects = createVertexEffectsHelicopterCorner();
1340
    for( VertexEffect effect : effects ) mesh.apply(effect);
1341

  
1342
    float E = 0.5f;
1343
    Static3D roundingCenter = new Static3D(-E/2,-E/2,-E/2);
1344

  
1345
    Static3D[] verticesType1 = new Static3D[1];
1346
    verticesType1[0] = new Static3D(0.0f,0.0f,0.0f);
1347
    roundCorners(mesh,roundingCenter,verticesType1,0.08f,0.15f);
1348

  
1349
    Static3D[] verticesType2 = new Static3D[3];
1350
    verticesType2[0] = new Static3D(-E, 0, 0);
1351
    verticesType2[1] = new Static3D( 0,-E, 0);
1352
    verticesType2[2] = new Static3D( 0, 0,-E);
1353
    roundCorners(mesh,roundingCenter,verticesType2,0.08f,0.20f);
1354

  
1355
    mesh.mergeEffComponents();
1356

  
1357
    return mesh;
1358
    }
1359

  
1360
///////////////////////////////////////////////////////////////////////////////////////////////////
1361

  
1362 1253
  public MeshBase createHelicopterFaceMesh()
1363 1254
    {
1364 1255
    MeshBase mesh = createFacesHelicopterFace();
......
1965 1856

  
1966 1857
///////////////////////////////////////////////////////////////////////////////////////////////////
1967 1858

  
1968
  private double computeScale(double[] v1, double[] v2)
1859
  private double computeScale(double[] v1, double[] v2, int v1i, int v2i)
1969 1860
    {
1970
    double lenSq1 = v1[0]*v1[0] + v1[1]*v1[1];
1971
    double lenSq2 = v2[0]*v2[0] + v2[1]*v2[1];
1861
    double v1x = v1[2*v1i];
1862
    double v1y = v1[2*v1i+1];
1863
    double v2x = v2[2*v2i];
1864
    double v2y = v2[2*v2i+1];
1865

  
1866
    double lenSq1 = v1x*v1x + v1y*v1y;
1867
    double lenSq2 = v2x*v2x + v2y*v2y;
1972 1868

  
1973 1869
    return Math.sqrt(lenSq2/lenSq1);
1974 1870
    }
......
2005 1901

  
2006 1902
  private boolean isScaledVersionOf(double[] newVert, double[] oldVert, int len, int vertex, boolean inverted)
2007 1903
    {
1904
    int newZeroIndex = computeRotatedIndex(0,len,vertex,inverted);
2008 1905
    double EPSILON = 0.001;
2009
    double scale = computeScale(newVert,oldVert);
1906
    double scale = computeScale(newVert,oldVert,newZeroIndex,0);
2010 1907

  
2011 1908
    for(int i=1; i<len; i++)
2012 1909
      {
......
2112 2009

  
2113 2010
      if( isScaledVersionOf(buffer,oldVert,len,vertex,inverted) )
2114 2011
        {
2115
        double scale = computeScale(oldVert,newVert);
2012
        int newZeroIndex = computeRotatedIndex(0,len,vertex,inverted);
2013
        double scale = computeScale(oldVert,newVert,0,newZeroIndex);
2116 2014
        correctInfo(info,scale,sin,cos,oldSticker,inverted);
2117 2015
        return true;
2118 2016
        }

Also available in: Unified diff