研究目的のためだけに、適切な破壊可能な地形を構築しようとしています。まあ、すべてうまくいきましたが、解像度は私を十分に満足させるものではありません. MC アルゴリズムを実装する例をたくさん見てきましたが、私が理解している限り、それらのほとんどは関数を使用して最終メッシュを三角測量しており、これは私には適切ではありません。
地形をどのように構築しているかを簡単に説明しようと思います。最終的な地形の解像度を改善または向上させる方法を提案してくれる人がいるかもしれません。
1) MC 三角形の事前計算。
各ケース (0-255) の MC ルックアップ テーブルを介して単純なループを実行し、[0,0,0] - [1,1,1] の三角形を計算しています。ここでは問題ありません。
2) 地形
ボクセルを保存する地形クラスがあります。一般に、次のようになります。
int size = 32;//Size of each axis.
unsigned char *voxels = new unsigned char[(size * size * size)/8];
したがって、各軸は 32 単位の長さですが、ビットごとにボクセル情報を格納します。つまり、ビットがオン (1) の場合、何かがあり、何かを描画する必要があります。
私はいくつかの機能を持っています:
TurnOn(x,y,z);
TurnOff(x,y,z);
ボクセルの位置をオンまたはオフにします。(ビットの操作に役立ちます)。
地形が割り当てられたら、パーリン ノイズを実行し、ビットをオンまたはオフにします。
私の地形クラスには、x、y、z の位置からマーチング キューブのケース番号 (0 ~ 255) を抽出する関数がもう 1 つあります。
unsigned char GetCaseNumber(x,y,z);
そのボクセルの隣人がオンかオフかを決定することによって。ここでは問題ありません。
3) レンダリング部分
軸ごとにループし、ケース番号を抽出してから、事前に計算された三角形をケースごとに取得し、x、y、z 座標に変換して、それらの三角形を描画します。ここでは問題ありません。
したがって、結果は次のようになります。
しかし、ご覧のとおり、どの単一の場所でも、解像度はたとえばこれに匹敵しません:
(ソース: angelfire.com )
MC の例で、人々が「iso 値」と呼ばれるものを使用しているのを見たことがありますが、これは私には理解できません。私の仕事を改善する方法、または iso 値とは何か、それを均一なグリッドに実装する方法についての提案は本当に素敵です。