4

私の現在のプロジェクトでは、メッシュを使用してレベルを構築するために Threejs を使用しています。カメラ、シーン、プロジェクター、レンダラーなどのすべてのグラフィック要素は、1 つのオブジェクトで実行されます。テスト目的で、シーン全体をさまざまなパラメーター (さまざまなレベル サイズなど) でリセットしたいと考えています。

アルゴリズムの時間を測定したいので、「完全な」リセットが必要です。したがって、私の現在のアプローチは、シーン/キャンバスを含む div ボックスを削除し、threejs コードを持つオブジェクト全体を削除することです。この後、グラフィカル レベルの新しいオブジェクトをインスタンス化します。残念ながら、これを 10 回連続で行うと、パフォーマンスが大幅に低下します。

また、オブジェクト全体を削除する前に、scene.delete() を使用してシーン内のすべてのメッシュを削除し、シーン、レンダラーなどを削除してみました。しかし、まだパフォーマンスの問題があります。

では、パフォーマンスを低下させることなく、すべてのグラフィカル webgl コンポーネントを完全にリセットするにはどうすればよいでしょうか?

前もって感謝します。

4

2 に答える 2

4

WebGLRenderer を削除しても WebGL コンテキストが解放されないため、3 つに関係するすべてを削除しても問題は解決しません。そのため、複数の WebGL コンテキストが同時に実行されることになります。ライブ コンテキストが追加されるたびに、パフォーマンスが低下します。やがて限界を迎えます。

コンテキストを解放するハッキングされた方法については、この質問を参照してください。

コンテキストを再作成する必要がないため、three.js ではコンテキストの解放はサポートされていません。私の場合、WebGL を使用するものと使用しないものがある複数のアプリケーション フェーズで Angular を使用して、サブコントローラーでアクセスできるように、レンダラーのインスタンスをページ レベル コントローラーに永続化するだけで、したがって、WebGLRenderer もコンテキストもありません。

于 2014-03-18T19:10:14.300 に答える
1

objパフォーマンスのリセットを向上させる可能性のある 2 つの機能:シーン内の各オブジェクトに対して、両方を試してください。

scene.remove( obj );
renderer.deallocateObject( obj );
于 2012-08-08T00:04:48.187 に答える