Revision 7dc57f89
Added by Leszek Koltunski about 3 years ago
src/main/java/org/distorted/helpers/FactoryCubit.java | ||
---|---|---|
238 | 238 |
} |
239 | 239 |
} |
240 | 240 |
|
241 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
242 |
|
|
243 |
MeshBase createFacesSkewbCorner() |
|
244 |
{ |
|
245 |
MeshBase[] meshes = new MeshBase[6]; |
|
246 |
|
|
247 |
float E = 0.5f; |
|
248 |
float F = SQ2/2; |
|
249 |
float G = SQ6/16; |
|
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/3,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/2,-2*G, F/2,-2*G, 3*F/8,-G, 1*F/8,G, 0,2*G }; |
|
261 |
float[] bands1 = computeBands(0,0,1,0,3); |
|
262 |
|
|
263 |
meshes[3] = new MeshPolygon(vertices1,bands1,1,5); |
|
264 |
meshes[3].setEffectAssociation(0,8,0); |
|
265 |
meshes[4] = meshes[3].copy(true); |
|
266 |
meshes[4].setEffectAssociation(0,16,0); |
|
267 |
meshes[5] = meshes[3].copy(true); |
|
268 |
meshes[5].setEffectAssociation(0,32,0); |
|
269 |
|
|
270 |
return new MeshJoined(meshes); |
|
271 |
} |
|
272 |
|
|
273 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
274 |
|
|
275 |
MeshBase createFacesSkewbFace() |
|
276 |
{ |
|
277 |
MeshBase[] meshes = new MeshBase[5]; |
|
278 |
|
|
279 |
float E = SQ2/4; |
|
280 |
float[] vertices0 = { -E,-E, +E,-E, +E,+E, -E,+E }; |
|
281 |
float[] bands0 = computeBands(0.051f,35,E/2,0.9f,7); |
|
282 |
|
|
283 |
meshes[0] = new MeshPolygon(vertices0, bands0, 3, 3); |
|
284 |
meshes[0].setEffectAssociation(0,1,0); |
|
285 |
|
|
286 |
float[] vertices1 = { -E,-SQ3*E, -E*0.7f,-SQ3*E, +E*0.7f,-SQ3*E, +E,-SQ3*E, 0,0 }; |
|
287 |
float[] bands1 = computeBands(0,0,1,0,3); |
|
288 |
|
|
289 |
meshes[1] = new MeshPolygon(vertices1,bands1,0,0); |
|
290 |
meshes[1].setEffectAssociation(0,2,0); |
|
291 |
meshes[2] = meshes[1].copy(true); |
|
292 |
meshes[2].setEffectAssociation(0,4,0); |
|
293 |
meshes[3] = meshes[1].copy(true); |
|
294 |
meshes[3].setEffectAssociation(0,8,0); |
|
295 |
meshes[4] = meshes[1].copy(true); |
|
296 |
meshes[4].setEffectAssociation(0,16,0); |
|
297 |
|
|
298 |
return new MeshJoined(meshes); |
|
299 |
} |
|
300 |
|
|
301 | 241 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
302 | 242 |
|
303 | 243 |
MeshBase createFacesHelicopterCorner() |
... | ... | |
813 | 753 |
|
814 | 754 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
815 | 755 |
// EFFECTS |
816 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
817 |
|
|
818 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
819 |
|
|
820 |
VertexEffect[] createVertexEffectsSkewbCorner() |
|
821 |
{ |
|
822 |
float E = 0.5f; |
|
823 |
|
|
824 |
Static3D axisX = new Static3D(1,0,0); |
|
825 |
Static3D axisY = new Static3D(0,1,0); |
|
826 |
Static3D axis0 = new Static3D(-SQ2/2,0,SQ2/2); |
|
827 |
Static3D axis1 = new Static3D(+SQ3/3,+SQ3/3,+SQ3/3); |
|
828 |
Static1D angle1 = new Static1D(+90); |
|
829 |
Static1D angle2 = new Static1D(-90); |
|
830 |
Static1D angle3 = new Static1D(-15); |
|
831 |
Static1D angle4 = new Static1D((float)((180.0f/Math.PI)*Math.acos(SQ3/3))); |
|
832 |
Static1D angle5 = new Static1D(120); |
|
833 |
Static1D angle6 = new Static1D(240); |
|
834 |
Static3D center1= new Static3D(0,0,0); |
|
835 |
Static3D center2= new Static3D(-0.5f,-0.5f,-0.5f); |
|
836 |
Static3D move1 = new Static3D(-E/4,-E/4,0); |
|
837 |
Static3D move2 = new Static3D(-0.5f+SQ2/4,-0.5f+SQ6/8,-0.5f); |
|
838 |
|
|
839 |
VertexEffect[] effect = new VertexEffect[10]; |
|
840 |
|
|
841 |
effect[0] = new VertexEffectMove(move1); |
|
842 |
effect[1] = new VertexEffectScale(new Static3D(1,1,-1)); |
|
843 |
effect[2] = new VertexEffectRotate(angle1,axisX,center1); |
|
844 |
effect[3] = new VertexEffectRotate(angle2,axisY,center1); |
|
845 |
effect[4] = new VertexEffectMove(move2); |
|
846 |
effect[5] = new VertexEffectRotate(angle1,axisX,center2); |
|
847 |
effect[6] = new VertexEffectRotate(angle3,axisY,center2); |
|
848 |
effect[7] = new VertexEffectRotate(angle4,axis0,center2); |
|
849 |
effect[8] = new VertexEffectRotate(angle5,axis1,center2); |
|
850 |
effect[9] = new VertexEffectRotate(angle6,axis1,center2); |
|
851 |
|
|
852 |
effect[0].setMeshAssociation( 7,-1); // meshes 0,1,2 |
|
853 |
effect[1].setMeshAssociation( 6,-1); // meshes 1,2 |
|
854 |
effect[2].setMeshAssociation( 2,-1); // mesh 1 |
|
855 |
effect[3].setMeshAssociation( 4,-1); // mesh 2 |
|
856 |
effect[4].setMeshAssociation(56,-1); // meshes 3,4,5 |
|
857 |
effect[5].setMeshAssociation(56,-1); // meshes 3,4,5 |
|
858 |
effect[6].setMeshAssociation(56,-1); // meshes 3,4,5 |
|
859 |
effect[7].setMeshAssociation(56,-1); // meshes 3,4,5 |
|
860 |
effect[8].setMeshAssociation(16,-1); // mesh 4 |
|
861 |
effect[9].setMeshAssociation(32,-1); // mesh 5 |
|
862 |
|
|
863 |
return effect; |
|
864 |
} |
|
865 |
|
|
866 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
867 |
|
|
868 |
VertexEffect[] createVertexEffectsSkewbFace() |
|
869 |
{ |
|
870 |
Static3D center = new Static3D(0,0,0); |
|
871 |
Static3D axisX = new Static3D(1,0,0); |
|
872 |
Static3D axisZ = new Static3D(0,0,1); |
|
873 |
float angle = -(float)((180.0f/Math.PI)*Math.acos(SQ3/3)); |
|
874 |
|
|
875 |
VertexEffect[] effect = new VertexEffect[6]; |
|
876 |
|
|
877 |
effect[0] = new VertexEffectRotate( new Static1D(angle), axisX, center); |
|
878 |
effect[1] = new VertexEffectRotate( new Static1D( 135), axisZ, center); |
|
879 |
effect[2] = new VertexEffectRotate( new Static1D( 45), axisZ, center); |
|
880 |
effect[3] = new VertexEffectRotate( new Static1D( -45), axisZ, center); |
|
881 |
effect[4] = new VertexEffectRotate( new Static1D( -135), axisZ, center); |
|
882 |
effect[5] = new VertexEffectMove( new Static3D(0,0,-0.5f) ); |
|
883 |
|
|
884 |
effect[0].setMeshAssociation(30,-1); // meshes 1,2,3,4 |
|
885 |
effect[1].setMeshAssociation( 2,-1); // mesh 1 |
|
886 |
effect[2].setMeshAssociation( 5,-1); // meshes 0,2 |
|
887 |
effect[3].setMeshAssociation( 8,-1); // mesh 3 |
|
888 |
effect[4].setMeshAssociation(16,-1); // mesh 4 |
|
889 |
effect[5].setMeshAssociation(30,-1); // meshes 1,2,3,4 |
|
890 |
|
|
891 |
return effect; |
|
892 |
} |
|
893 |
|
|
894 | 756 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
895 | 757 |
|
896 | 758 |
VertexEffect[] createVertexEffectsHelicopterCorner() |
... | ... | |
1468 | 1330 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
1469 | 1331 |
|
1470 | 1332 |
|
1471 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
1472 |
// SKEWB |
|
1473 |
|
|
1474 |
public MeshBase createSkewbCornerMesh() |
|
1475 |
{ |
|
1476 |
MeshBase mesh = createFacesSkewbCorner(); |
|
1477 |
VertexEffect[] effects = createVertexEffectsSkewbCorner(); |
|
1478 |
for( VertexEffect effect : effects ) mesh.apply(effect); |
|
1479 |
|
|
1480 |
float E = 0.5f; |
|
1481 |
Static3D roundingCenter = new Static3D(-E/2,-E/2,-E/2); |
|
1482 |
|
|
1483 |
Static3D[] verticesType1 = new Static3D[1]; |
|
1484 |
verticesType1[0] = new Static3D(0.0f,0.0f,0.0f); |
|
1485 |
roundCorners(mesh,roundingCenter,verticesType1,0.08f,0.15f); |
|
1486 |
|
|
1487 |
Static3D[] verticesType2 = new Static3D[3]; |
|
1488 |
verticesType2[0] = new Static3D(-E, 0, 0); |
|
1489 |
verticesType2[1] = new Static3D( 0,-E, 0); |
|
1490 |
verticesType2[2] = new Static3D( 0, 0,-E); |
|
1491 |
roundCorners(mesh,roundingCenter,verticesType2,0.08f,0.20f); |
|
1492 |
|
|
1493 |
mesh.mergeEffComponents(); |
|
1494 |
|
|
1495 |
return mesh; |
|
1496 |
} |
|
1497 |
|
|
1498 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
1499 |
|
|
1500 |
public MeshBase createSkewbFaceMesh() |
|
1501 |
{ |
|
1502 |
MeshBase mesh = createFacesSkewbFace(); |
|
1503 |
VertexEffect[] effects = createVertexEffectsSkewbFace(); |
|
1504 |
for( VertexEffect effect : effects ) mesh.apply(effect); |
|
1505 |
|
|
1506 |
Static3D roundingCenter = new Static3D(0,0,-0.2f); |
|
1507 |
float E = SQ2/4; |
|
1508 |
Static3D[] vertices = new Static3D[4]; |
|
1509 |
vertices[0] = new Static3D(-E*SQ2, 0, 0); |
|
1510 |
vertices[1] = new Static3D(+E*SQ2, 0, 0); |
|
1511 |
vertices[2] = new Static3D( 0, -E*SQ2, 0); |
|
1512 |
vertices[3] = new Static3D( 0, +E*SQ2, 0); |
|
1513 |
roundCorners(mesh,roundingCenter,vertices,0.06f,0.10f); |
|
1514 |
|
|
1515 |
mesh.mergeEffComponents(); |
|
1516 |
mesh.addEmptyTexComponent(); |
|
1517 |
|
|
1518 |
return mesh; |
|
1519 |
} |
|
1520 |
|
|
1521 | 1333 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
1522 | 1334 |
// Helicopter |
1523 | 1335 |
|
... | ... | |
2367 | 2179 |
staticVert[0] = new Static3D( (float)vertices[v][0], (float)vertices[v][1], (float)vertices[v][2]); |
2368 | 2180 |
|
2369 | 2181 |
int cent = centerIndexes[v]; |
2370 |
center.set( centers[cent][0], centers[cent][1], centers[cent][2]); |
|
2371 | 2182 |
|
2372 |
int corn = cornerIndexes[v]; |
|
2373 |
float strength = corners[corn][0]; |
|
2374 |
float radius = corners[corn][1]; |
|
2183 |
if( cent>=0 ) |
|
2184 |
{ |
|
2185 |
center.set( centers[cent][0], centers[cent][1], centers[cent][2]); |
|
2186 |
|
|
2187 |
int corn = cornerIndexes[v]; |
|
2188 |
float strength = corners[corn][0]; |
|
2189 |
float radius = corners[corn][1]; |
|
2375 | 2190 |
|
2376 |
roundCorners(mesh, center, staticVert, strength, radius); |
|
2191 |
roundCorners(mesh, center, staticVert, strength, radius); |
|
2192 |
} |
|
2377 | 2193 |
} |
2378 | 2194 |
} |
2379 | 2195 |
|
Also available in: Unified diff
Convert the Skewb.