【发布时间】:2017-05-03 02:09:20
【问题描述】:
使用 orbitcontrols.js(和 THREE.js),我想在代码中实现与旋转鼠标滚轮相同的效果。例如,我想调用类似 camera.zoomIn() 并让它向目标移动设定的距离。有人知道怎么做吗?
【问题讨论】:
标签: javascript three.js
使用 orbitcontrols.js(和 THREE.js),我想在代码中实现与旋转鼠标滚轮相同的效果。例如,我想调用类似 camera.zoomIn() 并让它向目标移动设定的距离。有人知道怎么做吗?
【问题讨论】:
标签: javascript three.js
您可以在OrbitControls.maxDistance 和OrbitControls.minDistance 上设置值,以编程方式放大和缩小。
例如,如果您想使用 gsap 设置缩小动画,您可以执行以下操作:
gsap.to(myOrbitControls, {
minDistance: 20, // target min distance
duration: 1,
overwrite: 'auto',
ease: 'power1.inOut',
onComplete: () => {
myOrbitControls.minDistance = 0 // reset to initial min distance
},
})
【讨论】:
至少对于简单的情况,您可以更改相机的位置(例如将x、y 和z 乘以一个因子),这会自动更新OrbitControls .
<input type="range"> 滑块示例:
zoomer.addEventListener('input', function(e) {
var zoomDistance = Number(zoomer.value),
currDistance = camera.position.length(),
factor = zoomDistance/currDistance;
camera.position.x *= factor;
camera.position.y *= factor;
camera.position.z *= factor;
});
【讨论】:
通过查看源代码,您可以在OrbitalControls 对象上调用.dollyIn(dollyScale) 和.dollyOut(dollyScale)。
编辑:这些不是公共方法;可以通过编辑OrbitalControls.js 来访问它们。
我在THREE.OrbitControls 函数中添加了this.dIn = dollyIn;,现在我可以通过从外部调用controls.dIn(1.05); controls.update(); 来放大。
【讨论】: