Для сложного объекта это занимает вечность.Для объекта с ~ 1 м полисом (гранями) (сфера сегментов 1024x512) требуется ~ 200 мс.Приводит ли лучевое вещание к каждому лицу?
Из коробки THREE.js проверяет каждый треугольник при выполнении лучевого вещания по сетке, и в ТРИ нет встроенных ускоряющих структур.
Я работал с другими над пакетом 3-mesh-bvh ( github , npm ), чтобы помочь решить эту проблему, которая может помочь вамвстать на скорости, которые вы ищете.Вот как это можно использовать:
import * as THREE from 'three';
import { MeshBVH, acceleratedRaycast } from 'three-mesh-bvh';
THREE.Mesh.prototype.raycast = acceleratedRaycast;
// ... initialize the scene...
globeMesh.geometry.boundsTree = new MeshBVH(globeMesh.geometry);
// ... initialize raycaster...
// Optional. Improves the performance of the raycast
// if you only need the first collision
raycaster.firstHitOnly = true;
const intersects = raycaster.intersectObject(globeMesh, true);
// do something with the intersections
В README упоминаются некоторые оговорки, так что имейте это в виду (модифицирован индекс сетки, поддерживается только неанимированная BufferGeometry и т. Д.).И еще есть некоторая оптимизация памяти, которую можно было бы сделать, но есть несколько настраиваемых опций, которые помогут настроить это.
Мне будет интересно услышать, как это работает для вас!Не стесняйтесь оставлять отзывы в вопросах, как улучшить пакет, а также.Надеюсь, это поможет!