Three.js - 视图宽度

Posted

技术标签:

【中文标题】Three.js - 视图宽度【英文标题】:Three.js - Width of view 【发布时间】:2012-11-01 07:11:10 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

你必须在这里准确。

在给定相机的视野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

three.js r.117

【讨论】:

dist 是来自相机属性的 FAR 值的值吗? dist 必须小于FAR,否则该位置将不可见。 真的...我误会了,从dist 发生什么.. 在代码中看不到它值的先前定义,请描述一下,dist 是什么? Dtis = 远 - 近与否?谢谢! dist 是与相机的距离。如果您需要帮助,请发一个新帖子。谢谢。 @XåpplI'-I0llwlg'I- 谢谢。更新了答案。【参考方案2】:

对于(完美的)球形物体,它会覆盖更多的近距离视图,因为您需要考虑切线,即您看不到“两极”。

对球形物体使用以下内容:

// 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 degree field of view without distortion in THREE.PerspectiveCamera

【讨论】:

以上是关于Three.js - 视图宽度的主要内容,如果未能解决你的问题,请参考以下文章

在运行时更改使用 Three.js 创建的 3D Cube 的宽度/高度/长度

如何用Three.js改变CubeGeometry的宽度?

当 div 的宽度减小时,使用 raycaster 进行检测并不完全准确,three.js(v72)

如何使 Three.js FOV 响应高度和宽度?

Three.js-如何限制3D场景中的摄像机视图?

Three.js实现高程数据加载