轨迹球控件更改事件

TrackballControls change events

我有一个没有动画循环的静态场景,我正在尝试使用 TrackballControls 的更改事件来触发渲染功能,遵循此 thread 中的模式,即:

var controls = new THREE.TrackballControls( camera, renderer.domElement );
controls.addEventListener( 'change', render );
function render() {
    renderer.render( scene, camera );
}

这适用于 OrbitControls,但当我替换 TrackballControls 时,更改事件不会触发。但是,如果我添加以下行:

_this.update();

在 TrackballControls.js 中的 mousewheel()、mousemove() 和 touchmove() 函数的末尾,我可以让更改事件正确触发(无论如何在我的例子中)。我不确定这是否是触发更改事件的最佳方式。分叉 TrackballControls 的本地副本是否是这种情况下的最佳解决方案,我是否忽略了某些内容,或者更改 TrackballControls.js 是否有意义?

TrackballControls 被编写为需要调用 controls.update() 的动画循环。

OrbitControls,另一方面,可以用在只有当鼠标移动时才渲染场景的静态场景中,像这样:

controls.addEventListener( 'change', render );

在任何一种情况下,控件都是示例的一部分,而不是库的一部分,因此您可以根据自己的喜好自由修改它们。

如果您的场景是静态的并且不需要阻尼,那么您的建议很好。

编辑:更正 three.js r.73