threex.dilategeometry.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. /**
  2. * @namespace
  3. */
  4. var THREEx = THREEx || {}
  5. /**
  6. * dilate a geometry inplace
  7. * @param {THREE.Geometry} geometry geometry to dilate
  8. * @param {Number} length percent to dilate, use negative value to erode
  9. */
  10. THREEx.dilateGeometry = function(geometry, length){
  11. // gather vertexNormals from geometry.faces
  12. var vertexNormals = new Array(geometry.vertices.length);
  13. geometry.faces.forEach(function(face){
  14. if( face instanceof THREE.Face4 ){
  15. vertexNormals[face.a] = face.vertexNormals[0];
  16. vertexNormals[face.b] = face.vertexNormals[1];
  17. vertexNormals[face.c] = face.vertexNormals[2];
  18. vertexNormals[face.d] = face.vertexNormals[3];
  19. }else if( face instanceof THREE.Face3 ){
  20. vertexNormals[face.a] = face.vertexNormals[0];
  21. vertexNormals[face.b] = face.vertexNormals[1];
  22. vertexNormals[face.c] = face.vertexNormals[2];
  23. }else console.assert(false);
  24. });
  25. // modify the vertices according to vertextNormal
  26. geometry.vertices.forEach(function(vertex, idx){
  27. var vertexNormal = vertexNormals[idx];
  28. vertex.x += vertexNormal.x * length;
  29. vertex.y += vertexNormal.y * length;
  30. vertex.z += vertexNormal.z * length;
  31. });
  32. };