3

2 つの異なるレンダラーで (同時にではなく連続して)シーンをレンダリングしようとしていますが、「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)

同時にではなくても、2 つの異なるレンダラーでシーンをレンダリングすることはしばしば推奨されないことを知っていますが、非常に大きなプロジェクトの一部であるため、問題を解決する他の方法は考えられませんでした。

renderer1 にリンクされている Scene1 に関連付けられた GL データがあることは理解していますが、それらのデータを削除して、別のレンダラーで再度 Scene1 をレンダリングできるようにするにはどうすればよいですか ???

2 つのレンダリングで同時にシーンをレンダリングしようとしていないことに注意してください (これはhttps://github.com/mrdoob/three.js/issues/189とは異なります)。

助けてくれてありがとう。よろしく。

4

1 に答える 1

1

この問題は、特定の OpenGL バッファにバインドされているオブジェクト/マテリアル/テクスチャに関連していました。したがって、解決策は、オブジェクトを他のシーンに追加する前に、特定のシーンから削除するオブジェクトのすべての子をバッファからアンバインドすることです。

ソリューションのコードをできるだけ早く投稿します。よろしく。

于 2013-11-06T15:02:15.943 に答える