ExplodeModifier.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /**
  2. * Make all faces use unique vertices
  3. * so that each face can be separated from others
  4. *
  5. * @author alteredq / http://alteredqualia.com/
  6. */
  7. THREE.ExplodeModifier = function () {
  8. };
  9. THREE.ExplodeModifier.prototype.modify = function ( geometry ) {
  10. var vertices = [];
  11. for ( var i = 0, il = geometry.faces.length; i < il; i ++ ) {
  12. var n = vertices.length;
  13. var face = geometry.faces[ i ];
  14. if ( face instanceof THREE.Face4 ) {
  15. var a = face.a;
  16. var b = face.b;
  17. var c = face.c;
  18. var d = face.d;
  19. var va = geometry.vertices[ a ];
  20. var vb = geometry.vertices[ b ];
  21. var vc = geometry.vertices[ c ];
  22. var vd = geometry.vertices[ d ];
  23. vertices.push( va.clone() );
  24. vertices.push( vb.clone() );
  25. vertices.push( vc.clone() );
  26. vertices.push( vd.clone() );
  27. face.a = n;
  28. face.b = n + 1;
  29. face.c = n + 2;
  30. face.d = n + 3;
  31. } else {
  32. var a = face.a;
  33. var b = face.b;
  34. var c = face.c;
  35. var va = geometry.vertices[ a ];
  36. var vb = geometry.vertices[ b ];
  37. var vc = geometry.vertices[ c ];
  38. vertices.push( va.clone() );
  39. vertices.push( vb.clone() );
  40. vertices.push( vc.clone() );
  41. face.a = n;
  42. face.b = n + 1;
  43. face.c = n + 2;
  44. }
  45. }
  46. geometry.vertices = vertices;
  47. delete geometry.__tmpVertices;
  48. }