WebGL & Three.js - 在两个渲染器中连续渲染场景

3
我正在尝试在两个不同的渲染器中(依次而非同时)呈现场景,但会导致错误“GL_INVALID_OPERATION”。
以下是示例脚本:
var scene1   = new THREE.Scene();
var camera1  = new THREE.PerspectiveCamera( ... );
var renderer1= new THREE.WebGLRenderer( ... );

var renderer2= new THREE.WebGLRenderer( ... );
var camera2  = new THREE.PerspectiveCamera( ... );

//Render scene1 in renderer1
renderer1.render( scene1, camera1 );

//[After some user event...]
//Render scene1 in renderer2
renderer2.render( scene1, camera2 );  //This fails. getError()=1282 (i.e. GL_INVALID_OPERATION)

我知道即使不同时在两个渲染器中呈现场景,这经常被弃用,但我想不出其他解决方法,因为它是一个非常大的项目的一部分。
我知道与场景1相关联的GL数据与renderer1相关联,但如何删除这些数据,以便我可以在另一个渲染器中再次呈现场景1?
请注意,我不是试图在两个渲染器中同时呈现场景(这与https://github.com/mrdoob/three.js/issues/189不同)。
感谢您的帮助。 问候。

我认为你应该更明确地表达你想要实现的目标,而不是仅仅展示你的问题。同时,可以查看一下如何实现渲染循环的示例。我对你的问题并不确定,因为有可能存在两个渲染器、相机和其他东西。也许可以查看一下 three.js 中附带的“多视图”示例。 - GuyGood
你好GuyGood,感谢你的帮助。然而我的问题与你理解的非常不同。我想要在renderer1中连续渲染场景1,然后再在renderer2中渲染。 - wallys
我试图改进我的问题描述,希望这样更易于理解。 - wallys
1个回答

1
问题与对象/材质/纹理绑定到特定的OpenGL缓冲区有关。因此,解决方法是在将对象从特定场景中删除并添加到另一个场景之前,取消绑定对象的所有子项与任何缓冲区的绑定。
我会尽快发布我的解决方案代码。 问候。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接