有没有办法找出场景渲染部分的宽度?
例如,如果我们有一个宽度为 100 的网格,但以一定程度的缩放进行渲染……我如何计算屏幕中正在渲染的网格部分的宽度?
有没有办法找出场景渲染部分的宽度?
例如,如果我们有一个宽度为 100 的网格,但以一定程度的缩放进行渲染……我如何计算屏幕中正在渲染的网格部分的宽度?
你必须在这里准确。
您可以在给定相机的视野camera.fov
和给定距离的情况下计算可见矩形区域dist
。
由于对象可能具有深度,因此您必须通过网格选择一个平面,并在该距离处进行计算。
以下是如何计算可见距离height
和width
给定距离dist
相机的方法。
var vFOV = THREE.MathUtils.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
三.js r.117
对于(完美的)球形物体,它将覆盖更多的近距离视图,因为您需要考虑切线,即您看不到“极点”。
对球形对象使用以下内容:
// 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 - 请参阅:在 THREE.PerspectiveCamera 中无失真的 90 度视野