1

私は過去数日間、八分木と四分木をいじっています。それらを構築し、反復し、必要な情報を吐き出すことができます。また、画面全体を常に確認するのではなく、画面を小さなセクションに分割して特定のセクションの画面上の動きを検出できるようにする衝突検出に非常に役立つことも知っています。ただし、八分木または四分木を使用して立方体タイプの世界を生成する方法を理解することはできません。

これが私が考えていたいくつかのアイデアです:

1)クワッド/オクトツリーを使用して、設定された立方体(10x10x10)を細分割し、少なくとも1枚の葉が均一になるまで細分割します。次に、均一でない他のすべてのリーフを削除して、立方体のさまざまなサイズを指定します。

2)空間内の点(x、y、z)を、すべて同じサイズまたはノードの深さに達する葉が少なくとも1つある立方体を取得するまで細分割し、それらすべての位置(x、 y、z)さまざまなタイプのブロックの位置として。

このような3D環境を構築する際に八分木または四分木を使用する背後にあるロジックを誰かが説明できますか?それはx、y、zに基づいていますか、それとも一定の立方体の測定に基づいていますか?どうすればいいのかよくわかりません。

4

2 に答える 2

2

Octreeは、キューブワールドのチャンクを均等に分割することに集中するのに本当に役立ちます。彼らが演じる秘訣は、オクトリーの枝に立方体を送り続けると、これらを自動的に断片に分割し、後で近接ベースで抽出できるようにすることです(つまり、Chunk01(128,0,0)Chunk02(256,0,0) )など。)

キューブを八分木に格納するときに、それらの「タイプ」(それらを説明するマテリアルまたはある種の列挙型)も定義します。これを行うことで、Octreeがこれらの立方体を隣人(つまり、草、石、砂など)になった場合にグループ化することもできます。これにより、octreeアルゴリズムは、これらを1倍大きい正方形/長方形のプリミティブに折りたたむ/凝縮する方法に関するインテリジェンスの一部を処理できるようになり、キューブ数を減らすことができます。

結局のところ、キューブワールドへのアプローチは2つあります。最初のアプローチは、エンドユーザーに一度にワールドを1xキューブにしたと信じてもらいたいのですが、実際にはメッシュ/頂点カウントをマージしてサーフェスのチャンクとしてのその錯覚は、実際には1倍の大きなメッシュであり、数百の立方体ではありません。ユーザーがキューブを操作したとき(つまり、削除/追加)にのみ、メッシュを再計算して複数のキューブの錯覚を実現します。しかし、すぐにそれを巨大な統合メッシュに交換します。

octreeを実行し、チャンクを単一のメッシュ形式に統合したら(頂点の配列をGPUバッファーにフィードすることにより)、octreeの外部でカリングの周りに追加の作業を行う必要があります。これを行う方法はたくさんあります。ボリュームカリング(レイトレーシング)は通常、私が最も推奨している方法ですが、これはもっとうまくできると思います。

ここでの私の例では:https ://vimeo.com/71330826基本的に異なるアプローチをとっています。カメラの中心点がどこにあるかがわかっていて、カメラが向いている方向も追跡しているので、基本的にこれを近接フォーカスとして使用します。問題のチャンクがカメラの後ろにある場合、それらを破棄して、GPUの負荷を減らします。

また、各「チャンク」の顔はまだ外側に表示されていることに注意してください。各チャンクの内側は作成されませんが、各チャンクが独自のワークロードを処理している場合は、実際のチャンクの「壁」をレンダリングします。カメラの下...ユーザーのZ深度とカメラの境界も追跡することで後で修正しました

于 2013-08-03T01:31:06.580 に答える
0

四分木は2Dであるため、3D空間を表すために四分木を使用することは実際には意味がありません。

八分木を使用するにはさまざまな方法があります。一定数の一定サイズおよび同じサイズのキューブを使用すると、実装は確かに簡単になります。ただし、これは必ずしも最も効率的な実装であるとは限りません。quad/octreesはすべて効率に関するものです。

于 2012-07-16T13:02:08.260 に答える