2016-12-17 141 views
1

使用orbitcontrols.js(带有THREE.js),我想在代码中实现与旋转鼠标滚轮相同的效果。例如,我想调用诸如camera.zoomIn()之类的东西,并让它向目标移动一段距离。有人知道怎么做吗?orbitcontrols.js:如何放大/缩小

回答

2

查看源代码,您可以在OrbitalControls对象上调用.dollyIn(dollyScale).dollyOut(dollyScale)

编辑:这些不是公共方法;可以通过编辑OrbitalControls.js来访问它们。

我将this.dIn = dollyIn;添加到THREE.OrbitControls函数中,我现在可以通过从外部调用controls.dIn(1.05); controls.update();进行放大。

+0

谢谢克里斯,则意味着这个 功控制=新THREE.OrbitControls(照相机,renderer.domElement); 后面跟着这样的东西 controls.dollyIn(.5); 对不对?我得到一个对象不支持属性或方法错误。我尝试过所有的组合,包括直接调用dollyIn,因为它不是OrbitControls对象的成员,我总是得到相同的结果。 –

+0

你是对的;我找到了一种方法并编辑了我的答案。 –

+0

克里斯,谢谢! –

0

至少对于简单的情况下,可以更改相机的位置,这自动地更新OrbitControls(例如通过因子相乘xyz)。

实施例与<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; 
}); 

https://codepen.io/Sphinxxxx/pen/yPZQMV