[OpenGL]使用C++開發無限地形的Minecraft(我的世界 第二版)

一、寫在前面

這是我第二次編寫Minecraft了。上一次還是大二的時候,也是過年期間沒事情幹做的,暴露了我木有朋友的事實鴨!此次編寫的Minecraft新版本相較於之前有較大的改進,主要涉及:
(1)無限大小且更爲複雜的地形
(2)更好的渲染和處理速度(FPS維持在90-130之間)
程序基於C++和OpenGL進行開發,開發週期爲3天左右。文章的前半部分主要介紹實現效果。後半部分則對部分開發細節進行說明。

二、相關鏈接

B站視頻: https://www.bilibili.com/video/av44456073

上面錄製的Bilibili視頻中,展示了程序的執行結果,並說明了一些開發細節。關於源代碼,大家都知道OpenGL代碼普遍看起來比較混亂,因此這次我想整理一段時間,把代碼規範一下再放在我的Github上去。

三、程序效果截圖

下面幾幅爲程序的執行結果:

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

四、細節說明

爲了實現無限制大小地形的實時渲染,這裏採用了分塊渲染和存儲的策略。程序用Block來作爲一個獨立的渲染單位,每個Block包含16*16*256個cube。這裏可以採用OpenGL Instancing的策略來實現快速渲染,避免了對每個cube都要讀入buffer,節省渲染的時間。在存儲方面,將每個block作爲一個單獨的文件存儲在文件中去,這樣如果某個Block通過了可見性檢測後,就可以從文件中讀取block的數據並顯示出來。
這裏每個cube即minecraft中的最小單位—方塊,它具有多種不同的type。每個block文件中按照每個cube的座標順序存儲所有cube的type。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章