3755e36e48969f4dd5b16d931cb8d0f217718c00.svn-base 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import * as THREE from 'three'
  2. import {clearFids} from '../core/dyWoker'
  3. import {threeLayer, vector} from './initScene3D'
  4. const frustum = new THREE.Frustum();
  5. const cameraViewProjectionMatrix = new THREE.Matrix4();
  6. function meshStatus() {
  7. let camera = threeLayer.getCamera();
  8. if (!camera) return
  9. camera.updateMatrixWorld();
  10. camera.matrixWorldInverse.getInverse(camera.matrixWorld);
  11. cameraViewProjectionMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);
  12. frustum.setFromMatrix(cameraViewProjectionMatrix);
  13. let scene = threeLayer.getScene()
  14. let children = scene.children
  15. for (let i = 0; i < children.length; i++) {
  16. let m = children[i]
  17. if (m.type === 'Mesh') {
  18. let viewMesh = frustum.intersectsObject(m)
  19. if (!viewMesh) {
  20. scene.remove(m)
  21. m.isRemove = true
  22. vector.removeGeometry(m.texts)
  23. clearFids(m.fids)
  24. i--
  25. }
  26. }
  27. }
  28. }
  29. function unMeshAll () {
  30. let scene = threeLayer.getScene()
  31. let children = scene.children
  32. for (let i = 0; i < children.length; i++) {
  33. let m = children[i]
  34. if (m.type === 'Mesh') {
  35. scene.remove(m)
  36. m.isRemove = true
  37. vector.removeGeometry(m.texts)
  38. clearFids(m.fids)
  39. i--
  40. }
  41. }
  42. }
  43. export {
  44. unMeshAll,
  45. meshStatus
  46. }