質問

胞子や無限大にあるが、胞子の中間段階のない球面世界や、無限大宇宙のような複数の世界など、球面世界を実装、保存、レンダリングする最良の方法は何でしょうか。惑星自体がどのように生成されるか、またはそのサイズ/スケールについては仮定しません。

役に立ちましたか?

解決

レンダリングでは、惑星の表面から遠くにシームレスに移動するために、何らかの詳細レベルのアルゴリズムを使用する必要があります。多くの動的LODアルゴリズムがあります(こちらを参照)。 ROAMと呼ばれる古いアルゴリズムは、球体または惑星を処理するように適合させることができます( spherical ROAM )。ジオメトリクリップマップは新しい、より一般的なアルゴリズムで、球面に適用できます同様

データの保存に関しては、テクスチャリング、ハイトマップなどの手順生成(必要に応じて)を検討することをお勧めします。これは、InfinityとSporeの処理方法に似ています。プロシージャルテクスチャについて少し読むことができますこちら。地形の複雑さ/現実性に応じて、プロシージャルハイトマップはよりシンプルになります。最も単純なレベルでは、perlinノイズ関数によって頂点の高さを単純に移動できます。

他のヒント

表面に関するデータを保存するものを探している場合は、 HEALpix をご覧ください。 。これは、天体コミュニティによって空(別の球面)のマッピング専用に開発されたソフトウェアです。

HEALpixは、表面の位置とサイズを記述するメッシュを作成し、それぞれにIDを割り当てます。次に、そのIDをキーまたはインデックスとして使用して、その特定のレベルについて必要な詳細にアクセスできます。

HEASpixは、隣接する表面領域を見つける方法を提供し、各メッシュポイントの中心と頂点の位置を提供できます。

これは、必要に応じて各面を細分化することができる階層メッシュであるため、理論的には、必要に応じてメッシュの一部を低解像度で、その他の部分をより詳細に表示できます。 (メモリ制限まで)無限に割り切れるという優れた特性があり、特定の解像度のグリッドの各ピクセルは、その解像度レベルの他のすべてのピクセルと同じ面積を持ちます。

配布パッケージには、おそらく必要のないものがたくさんありますが、コアライブラリは役に立つはずです。

これはおそらくあなたが探しているものではありません...しかし、一体何なのでしょう。良い話です。

昔、恐竜がまだ地球を歩き回っていて、メモリがキロバイト単位で測定されていた頃、私は惑星をフラクタルに生成するためにいくつかのソフトウェアで遊んでいました。

アイデアは、惑星を表す2NxNの長方形を作成することでした。惑星を半分に束ねて、毎回2つの半分を少しずつ移動します。 (ランダムな位相シフトと振幅を持つカットの正弦波。シフトのための別のランダムな正弦波。)あとで、低レベルの領域を水で満たし、残りを高度で色分けします。

次に、直径Nの球体を上部に配置して投影し、地図のNxN領域を球体の半分に巻き付けます。地図上で球体を移動すると、回転しているように見えました。

メモリ内のある種のポリゴンモデルを使用してワールドを実装し、ファイルを使用してそれらを保存し、ある種の3Dエンジンを使用してレンダリングすることをお勧めします。そのいずれか、または単にポインターの中心と半径、および世界の地理を記述するオーバーレイ。

編集: もう少し詳しく教えてくれてありがとう。必要なディテールに応じて、何らかの方法を使用してテクスチャを小さな部分に分割する必要があります。20面のテクスチャを生成し、正二十面体を中心点付近に配置します。これが実際にどのように処理されるかについての考えについては、地図投影をご覧ください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top