2

3D 再構成のためにあまり最適化せずに完全な octree 実装をコーディングしましたが、ツリー構造に含まれるポインターが多すぎて、256^3 を超えるボクセルをサポートできません。

理論的には、非ツリー構造の場合、vector<bool>ボクセルあたり約 1 ビットを使用する を使用した場合、非ツリー構造は 8GB メモリで 2k^3 をサポートできるため、これはより受け入れられます。

ただし、最適化された octree 構造は、次の理由から、これと同等またはそれ以上のことができるはずです。

  1. すべてのボクセルを保存する必要はありません。これは、凝縮によって近くの同じ値のボクセルが圧縮される可能性があるためです。

  2. ポインター自体がすでにかなりの量のバイトを使用しているため、ポインターをあまり使用しないでください。

  3. octree のノード/ボクセル比はかなり低くなければなりません。

完全な octree の場合、ノード番号は として計算できます(s^3 -1) / 7。はsボリューム解像度で、2 のべき乗です。たとえば、 の場合、ボクセルの 4x4x4 グリッドを表すために octree にノードがs = 4必要です。1 + 8 = 9

これらの仕様を満たす C++ の octree 実装を知っている人はいますか?

4

1 に答える 1

2

私は octrees が進むべき道だと思いますが、子ノードは必要な場合にのみ構築する必要があります (少なくとも 1 つのボクセルが設定されています)。さらに、圧縮を使用する必要があります。多くの場合、隣接するボクセルは同じ値を持つため、RLE 圧縮はうまく機能しているようです。これは、この論文で説明されています http://www.terathon.com/voxels/

于 2013-06-18T12:33:45.753 に答える