文章摘要
文章展示了用纯CSS 3D变换技术重现经典游戏《DOOM》的创新尝试,通过
元素构建游戏场景,证明现代CSS的强大功能。作者旨在探索浏览器渲染的极限,同时致敬CSS发展30年来的进步。
文章总结
CSS版《毁灭战士》:用CSS实现3D渲染的经典游戏
项目概述
荷兰开发者Niels Leenheer成功使用纯CSS技术实现了经典游戏《毁灭战士》(DOOM)的3D渲染版本。这个创新项目展示了现代CSS的强大功能,所有游戏场景中的墙壁、地板、桶和怪物都通过<div>元素构建,并利用CSS 3D变换进行空间定位。
技术实现
核心原理
- 坐标转换:将DOOM的2D坐标系(Y轴朝北)转换为CSS 3D坐标系(Y轴朝上,Z轴朝向观察者)
- 数学计算:使用CSS的
hypot()和atan2()函数处理几何运算 - 世界移动:通过反向移动整个场景来模拟玩家移动效果
关键技术
3D渲染:
- 墙壁使用
transform属性进行3D定位 - 地板通过
rotateX(90deg)转为水平面 - 使用
clip-path处理不规则形状和孔洞
- 墙壁使用
动画效果:
- 门和电梯通过CSS过渡实现平滑移动
- 使用
@property注册自定义属性实现数值动画
视觉效果:
- 纹理对齐:通过世界坐标确保相邻区域纹理无缝衔接
- 光照系统:使用
filter: brightness()模拟不同区域的明暗变化 - 特殊效果:SVG滤镜实现幽灵怪物的半透明效果
创新突破
- CSS计算:将大量数学运算交给CSS引擎处理,减少JavaScript负担
- 响应式设计:
- 使用锚点定位(anchor positioning)实现HUD自适应
- 支持从第一人称到俯瞰视角的平滑切换
- 性能优化:
- 开发了CSS-only的视锥体裁切方案
- 利用类型研磨(type grinding)技术实现条件渲染
挑战与局限
技术限制:
- 天空渲染需要特殊处理(原游戏使用2D技巧)
- 性能瓶颈(iOS Safari在复杂场景会崩溃)
- 遇到多个浏览器兼容性问题
设计取舍:
- 游戏逻辑仍需JavaScript处理
- 部分效果无法完全还原原版游戏
项目意义
这个实验性项目证明了现代CSS已具备: - 复杂的3D渲染能力 - 丰富的动画控制功能 - 强大的视觉表现力
虽然无法替代WebGL/WebGPU等专业图形技术,但展示了CSS作为前端技术的惊人潜力。开发者通过这个项目探索了CSS的边界,为创意性应用提供了新思路。
评论总结
以下是评论内容的总结:
对CSS能力的质疑
- 认为CSS本质仍是网页样式语言,质疑其扩展用途的合理性
引用:"Is CSS that awesome? It's still a language designed for styling webpages"
引用:"No"(直接否定CSS的优越性)
- 认为CSS本质仍是网页样式语言,质疑其扩展用途的合理性
技术实现的赞赏
- 认可CSS近年来的进步,如实现3D场景和CPU模拟
引用:"now CSS can emulate an entire CPU without JavaScript"
引用:"Seriously impressive, especially the viewport culling trick"
- 认可CSS近年来的进步,如实现3D场景和CPU模拟
实用性争议
- 认为这类项目更多是技术演示而非最佳实践
引用:"don't do this. That fact that it runs doesn't make it a good idea"
引用:"If you're going to make a 3D web game use WebGL or WebGPU"
- 认为这类项目更多是技术演示而非最佳实践
技术细节讨论
- 指出项目仍依赖JavaScript(游戏逻辑)
引用:"The game logic runs in JavaScript" - 讨论CSS新特性(如2025年将添加if语句)
引用:"CSS has become closer to a full programming language"
- 指出项目仍依赖JavaScript(游戏逻辑)
文化现象观察
- 关注"万物皆可运行DOOM"的梗文化
引用:"at this point i'm more interested in what can't run doom"
引用:"hackers will be challenging themselves to run Crysis on calculators"
- 关注"万物皆可运行DOOM"的梗文化
浏览器兼容性
- 特别表扬Firefox的运行效果
引用:"Firefox should get kudos too, for running it the best"
- 特别表扬Firefox的运行效果
总结呈现了从技术质疑到赞赏、从理论可能到实践建议的多维度讨论,同时保留了原始评论的关键表述。