探索立方体世界:Cube Engine —— JavaScript 的3D沙盒引擎
Cube Engine 是一款基于HTML5的3D引擎,利用canvas元素进行渲染,无需依赖OpenGL或硬件加速。这不仅仅是一个概念验证和学习项目,它在特定条件下也能提供相当有趣的体验——前提是你有一台性能强劲的电脑。
演示与互动
想要亲身体验?直接访问实时演示页面,开启你的方块世界冒险之旅!
无限世界
游戏世界的构建灵感源自经典的《我的世界》(Minecraft),你可以自由地添加或移除任何物体,选择不同的节点类型。整个世界无穷无尽,由无数个16x16x∞的“区块”构成,并随着玩家探索而动态生成。虽然没有垂直限制,但由于渲染距离有限,远端的景象可能会逐步消失。
地形通过伪随机函数生成,模拟了Minecraft中的区块系统。每个区块都有一个高度值,低于这个高度的部分被填充为不同类型的土壤(如草、土、沙等)。然而,不同于Minecraft,本引擎采用2D Perlin噪声生成器,地下没有矿石、隧道,也没有敌人、生物、树木或物理效果。为了保证流畅运行,一些优化策略已被应用,包括背面对齐剔除、遮挡剔除和视锥剔除。
游戏中还提供了高度图和帧率显示功能,供你观察游戏状态。
渲染技术
由于canvas自身不支持3D渲染,Cube Engine 使用了一些基础的3D技术。画家算法用于确定渲染顺序,从后到前逐个绘制,确保近处的节点覆盖远处的。为了提高效率,你可以调整渲染距离以适应设备性能。
纹理处理也是一项挑战,因为canvas不支持纹理。为此,项目采用了仿射纹理映射系统。当然,如果你希望提高性能,还可以切换到纯色渲染模式。
纹理文件为_png_ 格式,其排列方式与Minecraft兼容,这意味着你可以使用任何现成的Minecraft纹理包。
保存与加载
游戏允许你在本地保存进度,将玩家周围3x3区块内的所有节点存储至浏览器的本地存储或文件中。你可以加载本地保存的游戏,但无法直接读取文件(出于安全考虑)。如果要从文件加载世界,需确保游戏在服务器环境下运行。
技术挑战
尽管项目实现了众多特性,但仍存在一些问题。例如,目前尚不支持角部剪裁,过于靠近节点会导致节点被移除并暴露出背面。此外,JavaScript对浮点数的处理影响了碰撞系统的精确性,目前的解决方案是在接近整数时对其进行“四舍五入”,但这并非理想方法。
最后,不同浏览器也有各自的问题:Chrome在纯色渲染时可能出现问题,Firefox则要求在全屏模式下才能锁定鼠标指针。
许可信息
该项目遵循WTFPL协议,意味着你可以自由地使用、修改和分发代码。
现在,就让我们一起在这个无限可能的立方体世界里尽情创造吧!