将相机位置移动限制在特定 3D 对象的区域

Posted

技术标签:

【中文标题】将相机位置移动限制在特定 3D 对象的区域【英文标题】:Limit camera positional movements to area of a specific 3D object 【发布时间】:2017-07-08 08:12:29 【问题描述】:

我正在尝试将相机位置移动限制在由 3D 对象/对象子项定义的特定区域。例如,如果我在海上有一个走道对象,我只希望我的用户能够在该走道上前后移动相机。类似于 Unity 中的第一人称控制器导航网格,但没有 AI 方面。

我会喜欢基于 AFrame 的解决方案,但如果有三个 js 解决方案,我不介意编写自定义组件。

谢谢!

【问题讨论】:

在过去,有一个名为 PathControls 的 Three.js 组件,它实现了相当多的此功能。见***.com/questions/23443110/…。但该组件不再可用。 【参考方案1】:

您可以通过以下方式创建一个 THREE.Box3 来获取 3D 对象/对象子对象的边界:

 var box = new THREE.Box3();
 box.setFromObject(yourObject);

在第一人称控制器中,您可以检查相机是否超出范围:

if(camera.position.x > box.max.x)
    camera.position.x = box.max.x;


if(camera.position.x < box.min.x)
    camera.position.x = box.max.x;


if(camera.position.z > box.max.z)
    camera.position.z = box.max.z;


if(camera.position.z < box.min.z)
    camera.position.z = box.max.z;

希望对你有帮助

【讨论】:

这就是我最终这样做的方式。这适用于像盒子这样的简单形状,但如果我们有自定义形状,则要困难得多。 我有一个复杂形状的建议。我用过一次:创建一个高度图。 B&W 中的位图,表示存在限制的位置

以上是关于将相机位置移动限制在特定 3D 对象的区域的主要内容,如果未能解决你的问题,请参考以下文章

需要在 iOS 中使用 UIPanGestureRecognizer 将 UIImageView 的移动限制在 UITableView 覆盖的区域

与 3D 应用程序中的 Windows 消息循环相关的错误时间?

QGraphicsTextItem的分页:将文本限制在特定的矩形区域

draggable()拖拽时限制移动区域

unity3D中,限制物体移动范围时出错

限制 jQuery 可拖动项与兄弟元素重叠/碰撞