TrackballControls 更改事件

tya*_*apo 3 three.js

我有一个没有动画循环的静态场景,并且尝试使用 TrackballControls 的更改事件来触发遵循此线程中的模式的渲染函数,即:

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

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

_this.update();
Run Code Online (Sandbox Code Playgroud)

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

Wes*_*ley 5

TrackballControls被编写为需要一个动画循环,其中controls.update()被调用。

OrbitControls另一方面,可以在静态场景中使用,其中仅当鼠标移动时才会渲染场景,如下所示:

controls.addEventListener( 'change', render );
Run Code Online (Sandbox Code Playgroud)

无论哪种情况,控件都是示例的一部分,而不是库的一部分,因此您可以根据自己的喜好随意修改它们。

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

编辑:更正了 Three.js r.73