時間記録:2024-11-30
現在、内部不可見のブロックを除去する機能を実装しました。
プロジェクトリンクと紹介
個人的感想#
この段階を完了する際に、プロジェクト名を次のように変更しました:bevy-Demo-Spirit-Realm (霊境)
ここでは、VR に関する Qian Lao の見解と VR の名前を借用しました。この名前は非常に感覚的だと思います(まさにこの名前であるべきのように感じます)。同時に、ゲームの中に仮想現実技術を取り入れたいとも思っています。
個人的には、仮想現実技術は単に仮想環境の中で現実を模倣する技術ではなく、仮想と現実を組み合わせ、相互に補完し合うことを試みるべきだと思います。
段階コード説明#
ブロック除去:ハッシュマップ(chunk_blocks)を作成し、xyz 軸を遍歴してすべてのブロックをハッシュマップに格納します。次に、別のループで chunk_blocks を遍歴し、現在の立方体の 6 つの面がブロックに接しているかどうかを if 文で判断し、反転させてブロックを生成します。
if !(
chunk_blocks.contains_key(&[pos[0], pos[1] + 1, pos[2]]) &&
chunk_blocks.contains_key(&[pos[0], pos[1] - 1, pos[2]]) &&
chunk_blocks.contains_key(&[pos[0] + 1, pos[1], pos[2]]) &&
chunk_blocks.contains_key(&[pos[0] - 1, pos[1], pos[2]]) &&
chunk_blocks.contains_key(&[pos[0], pos[1], pos[2] + 1]) &&
chunk_blocks.contains_key(&[pos[0], pos[1], pos[2] - 1])
){
add_cube_to_mesh(&mut positions, &mut normals, &mut uvs, &mut indices, [pos[0] as f32, pos[1] as f32, pos[2] as f32]);
}
現在、このコードは少なくとも 2 回の最適化イテレーションが必要です。一つは、ブロックのタイプに基づいて判断する必要があります。例えば、ブロックの面が水ブロックに接している場合、除去する必要はありません。現在のブロックには 2 つのタイプしかなく、1:実体ブロック、0:空気です。将来的には、水ブロックのようにもっと多くのブロックタイプが追加される予定です。(現在、最適化の便宜上、表示されるのは線で構成された三角形のみです)
もう一つは、空気にさらされているブロックが完全に最適化されていないことです。一つのブロックは任意の角度から 3 つの面しか見えず、残りの 3 つの面は見えません。これも除去する必要があります。
図中は 32x *64y *32z 個のブロックで構成された立方体です。