我正在尝试在两个不同的渲染器中渲染场景(不是同时),但它会导致错误“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)
我知道经常不赞成在两个不同的渲染器中渲染一个场景,即使不是在同一时间,但我认为没有其他方法可以解决我的问题,因为它是一个非常大的项目的一部分。
我知道有一些与scene1相关联的GL数据链接到renderer1但是如何删除这些数据以便我可以在另一个渲染器中再次渲染scene1 ???
请注意,我并非尝试同时渲染两个渲染中的场景(与https://github.com/mrdoob/three.js/issues/189不同)。
感谢您的帮助。 问候。
答案 0 :(得分:1)
问题与绑定到特定OpenGL缓冲区的对象/材质/纹理有关。因此,在将对象添加到其他场景之前,解决方案是从任何缓冲区取消绑定要从特定场景中移除的对象的所有子对象。
我会尽快发布我的解决方案的代码。 问候。