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 数据链接到渲染器 1,但是我怎样才能删除这些数据,以便我可以在另一个渲染器中再次渲染场景 1?

请注意,我并没有尝试同时渲染两个渲染中的场景(这与https://github.com/mrdoob/three.js/issues/189不同)。

谢谢您的帮助。问候。

4

1 回答 1

1

该问题与绑定到特定 OpenGL 缓冲区的对象/材质/纹理有关。因此,解决方案是在将要从特定场景中删除的对象的所有子对象从任何缓冲区中解除绑定,然后再将其添加到其他场景。

我会尽快发布我的解决方案的代码。问候。

于 2013-11-06T15:02:15.943 回答