【问题标题】:WebGL & Three.js - Render a scene successively in two renderersWebGL & Three.js - 在两个渲染器中连续渲染一个场景
【发布时间】:2013-11-22 01:27:41
【问题描述】:

我正在尝试在两个不同的渲染器中渲染一个场景(不能同时渲染),但这会导致错误“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 不同)。

感谢您的帮助。 问候。

【问题讨论】:

  • 我认为您应该更准确地了解您想要实现的目标,而不是展示您的问题。另请参阅有关如何实现渲染循环的示例。我不确定您的问题,因为可能有 2 个渲染器和相机之类的东西。不妨看看 three.js 附带的“多视图”示例
  • 您好 GuyGood,感谢您的帮助。但是,我的问题与您所理解的非常不同。我想在renderer1中依次渲染scene1,然后在renderer2中。
  • 我尝试改进对我的问题的描述,希望这样更容易理解。

标签: javascript three.js webgl


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 2015-04-01
    • 2020-08-20
    相关资源
    最近更新 更多