banner
[面包]MrTwoC

[面包]MrTwoC

你好,欢迎来到这个基于区块链的个人博客 名字:面包 / MrTwoc 爱好:跑步(5/10KM)、咖啡、游戏(MMORPG、FPS、Minecraft、Warframe) 兴趣方向:Rust、区块链、网络安全、量子信息(量子计算)、游戏设计与开发
bilibili
steam
email
github

[靈境]項目-第一階段進度

時間記錄:2024-11-30
目前實現了將內部不可見方塊剔除的功能。
項目連結與介紹

個人感想#

完成這階段同時,將項目名稱改成了:

bevy-Demo-Spirit-Realm (靈境)

這裡借用了錢老的關於 VR 的見解以及對 VR 的名字,我也覺得這個名字非常有感覺 (好像就應該叫這個名字一樣),同時也想在遊戲中,融入虛擬現實技術。

個人覺得,虛擬現實技術並不只是在虛擬環境中模擬現實的技術,而是應該嘗試虛擬與現實相結合,相輔相成的。

階段代碼說明#

方塊剔除:

創建一個 hashmap (chunk_blocks),遍歷 xyz 軸並將所有方塊存進 hashmap 中,再由另一個循環遍歷 chunk_blocks,並直接用 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]);
        }

目前這段代碼還需要至少兩次優化迭代,一個是需要根據方塊類型進行判斷,比如方塊的面貼著水方塊,則不需要剔除,目前方塊只有兩個類型,1:實體方塊、0:空氣,以後會有更多的方塊類型,就像水方塊。(目前由於方便優化的原因,只設置了顯示一條條的線組成的三角形)

另一個是暴露在空氣中的方塊沒有優化到徹底,一個方塊在任意角度只能看見三個面,另外三個面是看不到的,這也需要剔除掉。

圖中是 32x *64y *32z 個方塊組成的立方體
image

下一階段計劃#

1. 將另外三個不可見的面剔除掉 2. 實現區塊化管理,模擬玩家的可視化半徑,隨著玩家移動,帶動區塊的加載和卸載 3. 實現一個超平坦世界,類似我的世界中的(超平坦世界)
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。