【更新】我的新博客:www.ryuzhihao.cc,當然這個csdn博客也會更新
本文在新博客中的鏈接:點擊打開鏈接
首先上一下效果圖:嘗試用C++以及OpenGL做的一個簡化版Minecraft。
大三寒假剛剛結束,返校的第一天尋思着整理一下在家做的小程序。首先是這個仿製的3D遊戲《我的世界Minecraft》。
寫這個程序的時候,大概是臘月27到正月初七,而且家族親戚太多,每次都會想:我天,這個姐姐這麼年輕,我竟然要叫奶奶╮(╯▽╰)╭!!不過走親戚都是長輩們的活動,於是我抽了些空閒時間完成了這個程序。
如果大家有什麼問題或者建議的話,歡迎在下面評論一起探討哦~
演示程序鏈接:http://download.csdn.net/detail/mahabharata_/9756981
下面切入正題:
操作方法:
WASD移動,E切換磚塊,鼠標左鍵和右鍵分別用於放置/拆除磚塊。
F切換正常/飛翔模式,空格Space在飛翔模式下可以根據視角的俯仰進行升高/降低。
由於時間和水平有限,而且精力不足,實現的功能有:
1. 隨機且自然連續的地形、花草(使用柏林噪聲Perlin Noise,相關信息可以參考我的另一篇博客,此外還有一種噪聲Simplex)。
2. 允許建造、拆除11種磚塊(玻璃、紅磚、石灰石 etc.)。
3. 隨機的雲彩(但是他們並不移動)
4. 允許在第一人稱視角下,移動或者飛翔。
5. 視角裁剪,不渲染看不見的block。(爲了提高渲染效率,限制視角26°,且距離小於100的方塊被繪製)
地形大小爲300*300*4(360000)
下面,我想在這裏對實現過程中的一些想法或者能進一步提高的地方做一下總結:
1. 我瞭解到實際的Minecraft的地形數據是按照16×256×16的地形單元組織的,並且採用數據庫存儲。我試想:Minecraft或許同樣是只繪製攝像機周圍看得見的少數地形單元。當需要時從數據庫(或許sqlite比較合適)取出新的地形單元,這樣會大大減少查詢地形、渲染地形的時間,也方便存儲,並且可以做到理論上的地形無限大。
2. 可以進一步通過shader製作出電燈的效果(自發光體)。這樣可以做出更多好看的建築。
相關鏈接:
[1] 我的另一篇博客:[算法]柏林噪聲PerlinNoise:http://blog.csdn.net/mahabharata_/article/details/54743672