2

corner-point-gridに NX*NY*NZ セルがあるとします。NX*NY*NZ ブール値のマスクもあり、グリッドのどのセルを描画する必要があるかがわかります。

できるだけ少ないメモリを使用して、Java3D (または OpenGL、以下の概念は同じであるため、最後には問題ありません) で効率的なインデックス付きクワッド配列を作成したいと思います。

簡単にするために、各面の法線を宣言することをスキップしています。フラット シェーディングを使用し、照明を使用していないため、実際には法線は必要ありません。

各セルに色があります (これはセルごとのプロパティに基づいています)。

したがって、セルマスクに基づいて描画する必要がある顔をリストしています。

それぞれの顔に色を付けることができるように、同じ点 (異なる顔に属する) を数回繰り返していることに気づきます。

より効率的にする方法について何かヒントはありますか?

4

1 に答える 1

0

多くのオプションがあります:

まず、ジオメトリ シェーダーを使用して頂点を動的に生成できますが、これはかなりハイエンドのシステムを使用している場合にのみ機能します。

もう 1 つのオプションは、複数のパスでオブジェクトを描画することです。フィル レートを気にしない場合は、xyz 平面に沿ってクワッドのコレクションを描画し、ボリューム アレイに直接読み込むことができます。

同じ理屈に従って、オブジェクトをレイ キャストしてフラグメント シェーダーでレンダリングすることもできます。これは、NX、NY、および NZ のサイズによっては高速になる可能性があります。

四角形を描画する必要がある場合は、頂点データを個別に保存してから、頂点シェーダーのテクスチャからの読み取りを使用して色座標を決定することもできます。複数のレンダリング パスでグリッド全体の描画を分割できます。

頂点と一緒に色データを保存する必要がある場合、最後に試すことができるのは、xz 方向の各頂点の座標の 2 つのコンポーネントと共に、各色の 4 つのコピーを保存することです。配列全体を描画するには、立方体の各面に 1 つずつ、合計 6 つのパスを実行します。これは、見えない面のパスを削除することで大幅に最適化できます。

もちろん、最終的な選択は、描画する必要があるデータの量、対象とするハードウェアの種類、およびこのプロジェクトに費やす作業量によって異なります。

于 2011-06-13T21:24:57.350 に答える