【发布时间】:2018-11-25 21:11:19
【问题描述】:
我正在使用 Orbit 控件,但它们有一个奇怪的限制。
缩放取决于相机的球坐标相对于轨道轴的半径。我将尝试解释它是如何工作的:
每次用户滚动,scale 的值都会发生这样的变化:
(如果用户放大)
scale *= Math.pow(0.95, scope.zoomSpeed)
(或者如果用户缩小)
scale /= Math.pow(0.95, scope.zoomSpeed)
然后,半径值会随着每次更新而改变,如下所示:
spherical.radius *= scale
然后将比例值重新分配其默认值
scale = 1
所以半径不会随着每次更新而改变
spherical.radius 的值决定了您与相机所看到的距离有多近,因此,当然,放大时您有一个限制,因为半径只能变得很小(请参阅放大乘以0.95 的半径值,所以它每次都接近 0)
问题是,如果您靠近轨道轴 (spherical.radius ~= 0) 进行缩放,然后旋转相机并向下(或向上或任何地方)看,您将无法放大到该方向,因为 spherical.radius 可以不要再小了!
所以,我的问题是,如何使用 Orbit 控件实现该行为(当半径达到极限时放大或缩小)。
附:此代码可以在THREE.js 库的OrbitControl.js 中找到,更具体地说,在this.update() 函数中。这是github repo
【问题讨论】:
-
你说的是minzoom吗?请分享您的代码!问题不言自明!
-
不,我不是在谈论 minzoom,实际上我没有要添加的代码,我没有做任何特别的事情,我可以添加控件的基本用法。如果您放大到足够大(默认为 minzoom = 0),则缩放会变慢,直到您无法缩放,如果您旋转相机,您仍然无法缩放,无论您查看的方向如何
-
@UllasHunka
OrbitControls的名字是随机分配的。缩放与实际缩放没有任何关系。想象一下,我有一家餐馆,但我没有把我的菜叫steak或stew,而是叫它们picture frame或car wheel。我相信这个问题听起来令人困惑。但我认为这是有效的。
标签: javascript three.js 3d