GeometryUtils.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /**
  2. * @author mrdoob / http://mrdoob.com/
  3. */
  4. THREE.GeometryUtils = {
  5. merge: function ( geometry1, object2 /* mesh | geometry */ ) {
  6. var isMesh = object2 instanceof THREE.Mesh,
  7. vertexOffset = geometry1.vertices.length,
  8. uvPosition = geometry1.faceVertexUvs[ 0 ].length,
  9. geometry2 = isMesh ? object2.geometry : object2,
  10. vertices1 = geometry1.vertices,
  11. vertices2 = geometry2.vertices,
  12. faces1 = geometry1.faces,
  13. faces2 = geometry2.faces,
  14. uvs1 = geometry1.faceVertexUvs[ 0 ],
  15. uvs2 = geometry2.faceVertexUvs[ 0 ];
  16. isMesh && object2.matrixAutoUpdate && object2.updateMatrix();
  17. for ( var i = 0, il = vertices2.length; i < il; i ++ ) {
  18. var vertex = vertices2[ i ];
  19. var vertexCopy = new THREE.Vertex( vertex.position.clone() );
  20. isMesh && object2.matrix.multiplyVector3( vertexCopy.position );
  21. vertices1.push( vertexCopy );
  22. }
  23. for ( i = 0, il = faces2.length; i < il; i ++ ) {
  24. var face = faces2[ i ], faceCopy, normal, color,
  25. faceVertexNormals = face.vertexNormals,
  26. faceVertexColors = face.vertexColors;
  27. if ( face instanceof THREE.Face3 ) {
  28. faceCopy = new THREE.Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset );
  29. } else if ( face instanceof THREE.Face4 ) {
  30. faceCopy = new THREE.Face4( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset, face.d + vertexOffset );
  31. }
  32. faceCopy.normal.copy( face.normal );
  33. for ( var j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {
  34. normal = faceVertexNormals[ j ];
  35. faceCopy.vertexNormals.push( normal.clone() );
  36. }
  37. faceCopy.color.copy( face.color );
  38. for ( var j = 0, jl = faceVertexColors.length; j < jl; j ++ ) {
  39. color = faceVertexColors[ j ];
  40. faceCopy.vertexColors.push( color.clone() );
  41. }
  42. faceCopy.materials = face.materials.slice();
  43. faceCopy.centroid.copy( face.centroid );
  44. faces1.push( faceCopy );
  45. }
  46. for ( i = 0, il = uvs2.length; i < il; i ++ ) {
  47. var uv = uvs2[ i ], uvCopy = [];
  48. for ( var j = 0, jl = uv.length; j < jl; j ++ ) {
  49. uvCopy.push( new THREE.UV( uv[ j ].u, uv[ j ].v ) );
  50. }
  51. uvs1.push( uvCopy );
  52. }
  53. }
  54. };
粤ICP备19079148号