GeometryUtils.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. var GeometryUtils = {
  2. merge: function ( object1, object2 ) {
  3. var isMesh = object2 instanceof THREE.Mesh;
  4. var geometry1 = object1,
  5. vertexPosition = geometry1.vertices.length,
  6. facePosition = geometry1.faces.length,
  7. uvPosition = geometry1.uvs.length,
  8. geometry2 = isMesh ? object2.geometry : object2;
  9. if ( isMesh ) object2.updateMatrix();
  10. for ( var i = 0, il = geometry2.vertices.length; i < il; i ++ ) {
  11. var vertex = geometry2.vertices[ i ];
  12. var vertexCopy = new THREE.Vertex( vertex.position.clone() );
  13. if ( isMesh ) object2.matrix.transform( vertexCopy.position );
  14. geometry1.vertices.push( vertexCopy );
  15. }
  16. for ( var i = 0, il = geometry2.faces.length; i < il; i ++ ) {
  17. var face = geometry2.faces[ i ];
  18. if ( face instanceof THREE.Face3 ) {
  19. var faceCopy = new THREE.Face3();
  20. faceCopy.a = face.a + vertexPosition;
  21. faceCopy.b = face.b + vertexPosition;
  22. faceCopy.c = face.c + vertexPosition;
  23. } else if ( face instanceof THREE.Face4 ) {
  24. var faceCopy = new THREE.Face4();
  25. faceCopy.a = face.a + vertexPosition;
  26. faceCopy.b = face.b + vertexPosition;
  27. faceCopy.c = face.c + vertexPosition;
  28. faceCopy.d = face.d + vertexPosition;
  29. }
  30. for ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {
  31. var normal = face.vertexNormals[ j ];
  32. faceCopy.vertexNormals.push( normal.clone() );
  33. }
  34. geometry1.faces.push( faceCopy );
  35. }
  36. for ( var i = 0, il = geometry2.uvs.length; i < il; i ++ ) {
  37. var uv = geometry2.uvs[ i ];
  38. var uvCopy = [];
  39. for ( var j = 0, jl = uv.length; j < jl; j ++ ) {
  40. uvCopy.push( new THREE.UV( uv[ j ].u, uv[ j ].v ) );
  41. }
  42. geometry1.uvs.push( uvCopy );
  43. }
  44. }
  45. }
粤ICP备19079148号