楽しいボクセルエンジンを少し書こうとしていますが、実際のボクセルを保存する最善の方法を見つけるのに苦労しています。私はある種のチャンクが必要になるので、全世界をメモリに入れる必要がないことを承知しており、合理的なパフォーマンスでそれらをレンダリングする必要があることを承知しています。
私はoctreesについて読んで、それが1つのキューブで始まることを理解しています。そのキューブには8つのキューブがあり、それらすべての8つのキューブは別の8つのキューブになる可能性があります。しかし、ボクセルエンジンに適合しないと思いますボクセルキューブ/アイテムはすべてまったく同じサイズになります。
したがって、別のオプションは、16 * 16 * 16サイズの配列を作成し、それを1つのチャンクにして、項目で埋めることです。また、アイテムがないパーツの値は0になります(0 =空気)。しかし、これは多くのメモリを浪費することになり、非常に速くはありません。
次に、別のオプションは、各チャンクのベクトルであり、キューブでそれを埋めます。そして、立方体はチャンク内でその位置を保持します。これにより、メモリは節約されますが(エアブロックはありません)、特定の場所にあるキューブの検索が大幅に遅くなります。
だから私は本当に良い解決策を見つけることができません、そして誰かがそれを手伝ってくれることを望んでいます。それであなたは何を使いますか、そしてその理由は?
しかし、別の問題はレンダリングです。OpenGLを使用して各チャンクを読み取り、それをGPUに送信することは簡単ですが、非常に遅くなります。チャンクごとに1つのメッシュを生成する方が適切ですが、これは、1つのブロックを分割するたびに、チャンク全体を再構築する必要があることを意味します。だからそれは難しいでしょう。では、どうすればキューブをレンダリングできますか?チャンクごとに1つの頂点バッファーにすべてのキューブを作成し、それをレンダリングして、別のスレッドに配置しようとするか、別の方法がありますか?
ありがとう!