WebGL&Three.js-在两个渲染器中依次渲染场景

WebGL & Three.js - Render a scene successively in two renderers

本文关键字:两个 amp Three js- WebGL      更新时间:2023-09-26

我试图在两个不同的渲染器中渲染场景(连续而非同时),但这导致了错误"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)。

谢谢你的帮助。当做

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

我会尽快发布我的解决方案的代码。当做