3

我在尝试修改 react-three-fiber 中的正交相机时遇到问题。

基本上,我在画布中设置相机是这样的:

<Canvas
        invalidateFrameloop
        orthographic
        camera={{
          position: this.state.position,
          left: this.state.frustum[0],
          right: this.state.frustum[1],
          bottom: this.state.frustum[2],
          top: this.state.frustum[3]
        }} >
        <TreemapContainer ... zoomStuff={this.zoomStuff} />
      </ Canvas 

现在,zoomStuff 应该在执行某些操作时移动和更新相机信息(基本上它应该更新平截头体和周围的位置)

  private zoomStuff = (camera: OrthographicCamera, position: number[], frustum: number[]) => {
    this.setState(prevState => { return { ...prevState, position, frustum } })
    camera.position.set(position[0], position[1], position[2]);
    camera.left = frustum[0]
    camera.right = frustum[1]
    camera.bottom = frustum[2]
    camera.top = frustum[3]
    camera.updateProjectionMatrix();
  }

我知道这不是最好的方法,但我正在尝试一切,因为我有一个非常愚蠢的问题:

现在它正确地更新了相机位置和相机平截头体但是如果我碰巧滚动页面(不是画布本身,而只是页面),由于我完全不知道的原因触发了重新渲染。

最终结果是保留了最终位置,但截头锥体重置为开始位置。

我究竟做错了什么?无论如何我可以阻止这种重新渲染的发生吗?

4

1 回答 1

2

发现了。。

因为我不以任何方式滚动,只是把

<Canvas resize={{scroll: false}}
...
</Canvas>

成功了。

原因可以在这里找到: https ://github.com/react-spring/react-three-fiber/issues/251

于 2020-01-14T12:23:48.947 回答