2016-07-20 2 views
0

レンダリングしたい大量の3Dオブジェクト(小惑星)があります。私はすべてのジオメトリを単一のものにマージすることができますか、またはバッファジオメトリを使用することができます(これらは同じですか?)。THREE.js - 大量のオブジェクトを動的に描画しますか?

しかし、私の小惑星のオブジェクトは常に出て行きます。任意の秒で、より多くの小惑星を作成してシーンに配置することができます。

*質問*(これらは、パフォーマンスに大きな打撃を受けるとして)ジオメトリをバッファを再作成またはマージすることなく、オブジェクトのこのダイナミックなセットをレンダリング処理する方法

私は、シーンの動的な性質またはバッファリングが行われなければならないと考えています。

+0

あなたは何個のオブジェクトについて話していますか?また、各オブジェクトにはいくつの顔がありますか? FYI 'buffer-geometry'は、後者が前者で実装されていても、' merged-geometry'と同じ概念ではありません。 – gaitat

+0

私は同じ概念ではないと言っていませんでした。それはなぜ「OR」という言葉が使われるのかということです。オブジェクトについては、単にBoxGeometryを使用しています。 – AlvinfromDiaspar

答えて

2

これを処理する1つの方法は、すべての小惑星を1つのジオメトリにマージすることですが、個々の小惑星がマージされたジオメトリ(index + count)のどこにあるかに注意してください。小惑星が削除される必要があるとき、その小惑星の関連セグメントの位置データを0に設定するだけです。例えば、結合された幾何学が3小惑星、小惑星Aが0から10、Bが10から20、小惑星Bを削除するには、結合されたジオメトリの位置データを10から20に設定するだけです。

新しい小惑星を動的に作成する必要がある場合は、結合されたジオメトリの穴を作成しました。上記の例を続けると、小惑星Dを追加する必要がある場合は、位置データを10から20まで(「削除」Bから)Dのいずれかに入力するだけです。明らかに、新しい小惑星を作成する必要があるときにセグメント穴が残っていない場合は、結合されたジオメトリ全体を拡大してそれに応じて処理する必要があります。

+0

あなたのご意見ありがとうございます。私は本当にあなたの説明に従うとは思わない。要するに、私は潜在的に必要なだけの大きさのバッファを作ることを提案していますか?私はこれが私の状況にとっては良い考えだとは思わない。非常に制限的(すなわち、柔軟性がない)する可能性のないハックのように思える。 – AlvinfromDiaspar

+0

一度に表示する必要のある小惑星の最大数と同じくらいです。結合されたジオメトリは、各小惑星が[A、A、B、B、C、C、D、D]というマージドジオメトリバッファ内に2つのelemsを必要とする場合のように見えます。 Bを描画から削除することは、結合されたジオメトリバッファからBを単にゼロにすることです:[A、A、0,0、C、C、D、D]。はい、スペースの非効率性があるかもしれませんが、性能上のトレードオフはそれに値するものです。 –

+0

柔軟性がない可能性があります。しかし、これらの初期のゲーム(そして現代のゲームも)は、通常、理由のために一度に表示できる___の最大数にある程度の制限があります。 :) –

関連する問題