Three.js 替换渲染器后场景不显示
Three.js scene not displaying after replacing renderer
更新:重写了问题以使其更笼统。
(原文here供参考)
我正在 Three.js WebGLRenderer 中渲染场景。然后我需要用新的 WebGLRenderer 替换渲染器(用新的 canvas 替换 canvas)并在新的渲染器中再次渲染相同的场景。
设置大致如下:
cancelAnimationFrame(this.requestID_);
// all other Three.js objects stay same (and I let Three.js create a new canvas)
this.createNewRenderer();
this.animate();
但是,新的渲染器只会渲染空背景,而不是场景网格。
如果我用新计算的网格替换场景网格,渲染又好了。
因此我认为它与网格有关。
因此,为了避免重新计算网格,我尝试在创建新渲染器之前(和之后)根据 this three.js doc 设置所有 geometry.xxxNeedUpdate 和 material.needUpdate 标志,但是这也没用。
我如何才能"force refresh" 网格在新的 WebGLRenderer 中再次显示?
我目前正在通过如下方式刷新场景中的每个网格来解决此问题:
mesh.geometry = mesh.geometry.clone();
mesh.material = mesh.material.clone();
newMesh = mesh.clone();
更新:重写了问题以使其更笼统。 (原文here供参考)
我正在 Three.js WebGLRenderer 中渲染场景。然后我需要用新的 WebGLRenderer 替换渲染器(用新的 canvas 替换 canvas)并在新的渲染器中再次渲染相同的场景。
设置大致如下:
cancelAnimationFrame(this.requestID_);
// all other Three.js objects stay same (and I let Three.js create a new canvas)
this.createNewRenderer();
this.animate();
但是,新的渲染器只会渲染空背景,而不是场景网格。 如果我用新计算的网格替换场景网格,渲染又好了。
因此我认为它与网格有关。
因此,为了避免重新计算网格,我尝试在创建新渲染器之前(和之后)根据 this three.js doc 设置所有 geometry.xxxNeedUpdate 和 material.needUpdate 标志,但是这也没用。
我如何才能"force refresh" 网格在新的 WebGLRenderer 中再次显示?
我目前正在通过如下方式刷新场景中的每个网格来解决此问题:
mesh.geometry = mesh.geometry.clone();
mesh.material = mesh.material.clone();
newMesh = mesh.clone();