572 字
2 分钟
[Vibe项目-杂谈]Bevy与Rust的约会-0.18
介绍
目前是 2026 年 5 月 16 日,Bevy 版本 0.18.1
当前 0.19 的进度达到了 97%。
已实现
简述一下当前这个项目已经实现的部分:
- 核心区块系统 chunk.rs
三态存储 ChunkData:Empty(全空气,零内存)/ Uniform(单一方块类型,2字节)/ Mixed(异构数据,32³数组),实现高效内存管理
面剔除网格生成 generate_chunk_mesh():仅渲染与空气/不同方块相邻的面,减少三角形数量
地形填充 fill_terrain():y=0 石头、y=1 泥土、y=2 随机顶层(草/沙/石)
区块坐标系统:BlockPos、ChunkCoord、world_to_chunk() 坐标转换
边界脏标记 mark_block_dirty():方块变更时自动标记相邻区块重建 - 脏标记重建系统 chunk_dirty.rs
DirtyChunk 组件标记需要重建的区块
rebuild_dirty_chunks() 系统每帧检测脏区块并重建网格
set_block_dirty() 提供方块修改入口 - 摄像机控制 camera.rs
WASD + Space/Shift 六自由度移动(camera_movement())
鼠标视角控制(camera_rotation()),pitch/yaw 限制
仅在光标锁定时响应输入 - 输入系统 input.rs
ESC 键切换光标锁定(cursor_grab_system()) - 射线检测 raycast.rs
DDA 体素射线遍历算法 cast_ray():Amanatides & Woo 论文实现
高亮方块系统 raycast_highlight_system():准星指向的方块显示半透明黄色高亮
RayHitState 资源存储当前命中位置 - HUD 界面 hud.rs
十字准星 spawn_crosshair():白色十字线居中显示
坐标 + 目标方块信息 update_hud():实时显示摄像机位置和射线命中坐标
三角形计数 update_triangle_count():优先读取 GPU 渲染诊断数据,回退统计 Mesh 数据 - FPS 叠加层 fps_overlay.rs
独立插件 FpsOverlayPlugin,可配置字体/颜色/位置
实时显示帧率,支持显示/隐藏切换 - 线框调试 chunk_wire_frame.rs
V 键切换线框模式(toggle_wireframe())
同步 Wireframe 组件 + Gizmos 绘制区块包围盒
已完成的 MVP 步骤
✅ 画一个方块,生成摄像机,指向方块
✅ 画一个 32×32×32 区块,方块添加到区块中
✅ 摄像机自由移动查看世界
额外完成
鼠标指向对应的方块会高亮出来



[Vibe项目-杂谈]Bevy与Rust的约会-0.18
https://www.twocblog.site/posts/bevy/018new/