Есть ли способ узнать ширину визуализированной части сцены?

Например, если у нас есть сетка шириной 100, но визуализированная с определенным уровнем масштабирования … как я могу рассчитать ширину части сетки, которая визуализируется на экране?

Вы должны быть точными здесь.

Вы можете вычислить видимую прямоугольную область с учетом поля зрения camera.fov и заданного расстояния dist от камеры.

Поскольку объект предположительно имеет глубину, вы должны выбрать одну плоскость через сетку и выполнить расчет на этом расстоянии.

Вот как рассчитать видимую height и width для заданного dist от камеры.

 var vFOV = THREE.Math.degToRad( camera.fov ); // convert vertical fov to radians var height = 2 * Math.tan( vFOV / 2 ) * dist; // visible height var width = height * camera.aspect; // visible width 

three.js r.87

Для (идеального) сферического объекта он будет охватывать большую часть вида крупным планом, так как вам необходимо учитывать касательную, т.е. вы не можете видеть «полюса».

Используйте следующее для сферического объекта:

 // we're using the following triangle: camera - tangent point on sphere - centre of sphere var targetAngle = 2 * Math.asin(objectRadius / distanceToCamera); var vFOV = THREE.Math.degToRad(this.fov); var normalizedHeight = targetAngle / vFOV; 

Умножьте это на ширину окна просмотра, чтобы получить высоту экрана. Для ширины вам нужно применить hFOV — см .: 90 градусов поля зрения без искажений в THREE.PerspectiveCamera