繁体   English   中英

Three.js - 视图的宽度

[英]Three.js - Width of view

有没有办法找出场景渲染部分的宽度?

例如,如果我们有一个宽度为 100 的网格,但以一定的缩放级别进行渲染……我如何计算正在屏幕中渲染的网格部分的宽度?

你必须在这里精确。

您可以在给定相机的视野、 camera.fov和与相机的给定距离dist下计算可见矩形区域。

由于对象可能具有深度,因此您必须通过网格选择一个平面,并在该距离处进行计算。

以下是如何计算距相机给定距离dist的可见heightwidth

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 度视野

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM