Skip to content

Repository files navigation

Minecraft

一张方块贴图一张点阵字,做出可存档的第一人称体素世界。

没有模型、没有字体引擎、没有天空盒。方块、快捷栏、菜单全部从这两张图里来;天空和昼夜是着色器画出来的。

当前版本:v0.3.0。设计笔记在 docs/v0.3.0


编译

macOS:

brew install glfw cmake
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
cd build && ./Minecraft

Linux:

sudo apt install cmake g++ libglfw3-dev libgl1-mesa-dev
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
cd build && ./Minecraft

build/ 里运行(CMake 会把 resources/ 拷到旁边)。存档写在当前工作目录的 saves/


界面

启动先到标题,不自动进世界。

页面 能做什么
标题 继续上次、打开存档、设置、退出
存档 按时间列出世界;进入、删除、新建
新建 起名;种子可手输或随机
设置 视野、视距、鼠标灵敏度、垂直同步、全屏、太阳/月亮、固定正午
暂停 Esc。世界还在,模拟停下。可回标题或切档
游戏中 准星、九格快捷栏、选中方块描边
背包 E。点选方块放进快捷栏。草地只有一种,放到哪个群系就用哪套草皮

菜单空闲时休眠,不空转 GPU。

标题 存档
标题菜单 存档列表
继续上次、打开存档、设置、退出 按时间列出世界;进入、删除、新建

气候

世界由三张独立的噪声决定:大陆度、温度、湿度。先分海陆,陆地上再按冷热干湿铺开 九个群系(加上海洋一共十个)。交界处高度平滑过渡,不会突然断成悬崖。

干燥 适中 湿润
沙漠:平沙丘、仙人掌,沙下有沙砖,没有高山 稀树草原:黄绿草、橙色树干,树很稀 雨林:巨木、蕨类
戈壁:沙石地表、枯灌木 草原:开阔草地、野花 森林:橡树、起伏山地
苔原:苔藓土夹残雪和碎石,无树,河不结冰 针叶林:云杉、群山,河不结冰
极寒 雪原:整片积雪,无树,河面结冰

岸边:湿润地带草地直接入水;只有海洋和沙漠铺沙。

陆地上会切开弯曲的河。湿润区河网密,沙漠几乎没河。只有雪原把河面最上一格冻成冰,冰下仍是水;苔原和针叶林保持水面。冰雪不随昼夜融化。

三个寒带一眼能分开:雪原是极地寒漠,苔原是林木线以北的低植被(地面本身就是苔藓,再点缀蕨和枯灌木),针叶林才有云杉。

植物跟气候走:雨林密、针叶林有云杉、草原几乎无树、苔原无树、沙漠腹地寸草不生。

寒带 亚寒带 温带
寒带 亚寒带 温带
热带 山和水域
热带 山和水域

昼夜

完整一天大约五分钟。按住 T 可以快进,方便看过渡。设置里打开 Fixed Noon 后锁在正午,时间不再走,T 也无效。

太阳从东边升起、西边落下,正午停在南边高空(约 50°),不在天顶——和北半球一样。墙面亮度跟朝向走:上午东墙先亮,正午顶面和南面最亮、北墙几乎只有天空散射,下午照射西面。树荫、屋檐看不到天的地方只剩间接光,会暗一截。通过日光和月光,让各个方向光照强度不同,贴近现实世界。

白昼日光 黄昏日落 夜间月光
白昼日光 黄昏日落 夜间月光
海上日落 远景雾
海上日落 远景雾

怎么画得动

不按方块逐个提交。16×16×16 的一截先拼成一份网格,GPU 一次画完这一截。一整根柱子最多八段;全是空气的那段直接跳过。

看不见的面一开始就不会进网格:

  • 两块实心石头贴在一起,中间那两面扔掉。
  • 只留下露在空气、水、树叶旁边的外表面。
  • 画的时候再关掉朝里的背面,镜头看不到的那一侧不占填充。

所以一座山看起来是成千上万块,真正画出去的几乎只有地表那一层皮。改一块只重做它附近那几截,不用重画整个世界。镜头背后和雾以外的区块也不送去画。

进世界时先生成镜头附近一圈,生成和网格分两条线程,远处再铺开,避免卡顿。可选择关闭日月和渲染距离来进一步降低 GPU 负荷。


操作

作用
WASD 移动
空格 / Shift 跳、潜行;飞行时升降
V 飞行
左键 / 右键 挖 / 放
1–9、滚轮 快捷栏
E 背包:点选方块放进快捷栏
Esc 暂停;背包里则关闭背包
T 按住加快昼夜(固定正午时无效)

发行包

目前 GitHub Release 仍是 v0.2.0 的 Minecraft-v0.2.0-macos-arm64.zip。解压后直接运行 Minecraft。仅 Apple Silicon。若系统提示无法打开,在 Finder 里右键 → 打开。

存档写在运行目录下的 saves/,不会进 git。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages