プレイヤーに大きなスペースを必要とするXNAゲームを作成しています。現在、私が使用しているテスト高さマップは4096x4096で、4ビットBMPとして保存されています。
私がやろうとしているのは、その巨大なハイトマップファイルを取得して、ゲームでレンダリングすることです。私が遭遇している問題は、利用可能なメモリの大部分を使用するため、テレイン全体を一度にメモリにロードするのは非効率的であるという事実です。
私が遭遇したもう1つの問題は、XNA内でハード制限が設定されているため、1つのプリミティブでテレインをすべてレンダリングできないことです。
そうは言っても、私はいくつかの解決策に出くわしましたが、それらすべてを以下にリストしました:
- 現在のユーザーの位置に基づいたレンダリング-基本的に、ユーザーが世界中のどの方向を向いているかに関係なく、ユーザーの周りに正方形を描画します。ユーザーが表示しないスペースをレンダリングしているため、これも私が望んでいたものとは異なります。
- ユーザーの向きと位置に基づいたレンダリング-ハイトマップのどのピクセルがレンダリングされることになっているはずの三角形を取得する式を見つけましたが、これは非常に難しいことが判明しました。
- テレインを複数のチャンクに分割し、どのチャンクがユーザーに最も近いかをレンダリングします-まだ人々に表示されないチャンクをレンダリングしているため、まだあまり効率的ではありません。そして、高さマップをいくつかに分割する必要があり、スケーラビリティが大きな問題になるため、これは作業集約型です。
それらの解決策を試した後、私は何をすべきかについての考えが新鮮です。人々がこれらの複雑なアルゴリズムを実行するように言われているいくつかの回答を受け取りましたが、私はそれらを行う方法にさえどうしてもわからないだけです。
したがって、基本的に私はXNAで巨大な地形を最大限の効率でレンダリングするシンプルで簡単な方法を求めています。
私はゲーム開発全般については初心者ですが、それが有望であると思われる場合は、調査に応じます。
更新1: geoclipmappingメソッドを調査した後、私はそれでコーディングを始めました。私はすべての数学を終えて、ゲームが実行されます。しかし、それは非常に非効率的です-これはおそらく私の側の悪いコーディングです。それは2FPSで実行され、私のCPUのコア全体を使用します。コードを改善するつもりですが、さらにサポートが必要になると思います。TerrainマネージャークラスのコードのPastebinを次に示します。より効率的になった場合は、後でさらに結果を投稿します。