Farbrausch 演示场景工具源码合集(fr_public)
Farbrausch 2001—2011 年 demo 工具源码合集,使用 C++,涉及 demoscene 与 D...
Cube-engine · Nurgak/Cube-engine
Cube Engine 是一个完全用 HTML5 Canvas 编写的 3D 引擎,不使用 OpenGL,因此没有 3D 硬件加速;作者定位为概念验证与学习项目。世界类似 Minecraft 的体素方块世界,可增删任意方块节点;地形由伪随机函数生成,按 16×16 节点的区块动...
Cube Engine 是一个完全基于 HTML5 Canvas 编写的 3D 引擎,作者明确表示它不使用 OpenGL,因此也没有任何 3D 硬件加速。项目自我定位为概念验证(proof of concept)与学习项目:它能在浏览器里跑出一个类似 Minecraft 的体素方块世界,但作者也坦言,只有在性能非常强劲的机器上才谈得上“有点好玩”。
从技术角度看,它的价值不在于做出一个可玩的游戏,而在于演示:在没有 GPU 3D 管线的前提下,如何仅靠 Canvas 2D 的绘制能力,用最基础的 3D 渲染技术把方块世界画出来。README 中列出的章节包括 Demo、World、Rendering、Saving、Problems 与 Licence,基本覆盖了项目的全部可核验信息。
世界形态参考了 Minecraft 这类流行的方块体素 3D 游戏。玩家可以增删任意方块节点,引擎提供多种不同类型的节点。
与 Minecraft 的差异也很明确:世界渲染器使用的是 2D perlin 噪声而非 3D 噪声,因此地下没有矿石、没有隧道;世界里没有敌人或生物,没有树木,也没有物理系统。作者的解释很直接——渲染器已经吃掉了几乎全部算力,功能必须受限。
菜单中还可以开启高度图(height map)与帧率(FPS)曲线图,便于观察生成结果与性能表现。
渲染采用简单的画家算法(painter's algorithm):所有内容从后往前绘制,靠近摄像机的节点覆盖在更远的节点之上。由于 Canvas 本身不具备任何 3D 渲染能力,引擎只能使用非常基础的 3D 渲染技术,并实现了一些优化手段:
作者还提到,八叉树(octrees)不适合这个游戏及其规模,区块(chunks)是更合适的组织方式。想要更快的话,可以在设置中选择更低的渲染距离。
纹理方面,Canvas 不支持纹理,因此纹理实现必须从零搭建,项目使用了一套仿射纹理映射(affine texture mapping)系统。带纹理渲染会明显变慢,所以引擎同时提供一个使用纯色的简单渲染器。纹理存放在一个 PNG 文件中,纹理排布与 Minecraft 完全一致,因此理论上可以直接套用现成的 Minecraft 材质包。
游戏支持本地保存:它会把一个 3×3 区块(玩家位于中间区块)内的所有节点存入浏览器的本地存储,或保存为文件。数据可以从本地加载,但出于安全原因不能从文件加载;若要从文件载入世界,程序必须运行在服务器上。
README 专门用一节坦率列出了局限,这些也是理解项目边界的重要信息:
context.fill() 调用过于频繁时似乎会失效。项目提供在线 Demo(见项目主页),可直接在浏览器中体验。源码以 WTFPL 许可证发布。
这个项目适合作为“在受限平台上做 3D”的教学样本:可以重点阅读区块数据结构、伪随机地形与插值、画家算法的绘制顺序,以及三种剔除策略的实现方式;纹理部分则能观察仿射纹理映射在 Canvas 上的落地方式。由于没有硬件加速,阅读时也应结合 README 的性能说明,理解作者为何砍掉矿石、生物、树木与物理等特性。
Farbrausch 2001—2011 年 demo 工具源码合集,使用 C++,涉及 demoscene 与 D...
Endless Sky 是一款 C++ 编写的 2D 沙盒式太空探索游戏,玩法接近 Elite、Esc...
id Software 于 2012 年 2 月 6 日发布的《德军总部 3D》原始 PC 版源码存档...
Fish Folk: Jumpy 是一款鱼类像素画风的战术 2D 射击游戏,使用 Rust 语言与...