Rust 光线步进 + WebGL 渲染
🖱️ 拖拽 旋转 | 🖱️ 滚轮 缩放 | 8 次幂曼德博球
曼德博球是曼德博集合在三维空间中的推广。它没有由三角形组成的模型,形状完全由一个数学公式定义,每个像素通过「光线步进」直接从公式计算出来。
z² + c 的三维版本。dr = 8 · r⁷ · dr + 1,得到当前点到分形表面距离的下界估计 DE = 0.5 · r · ln r / dr。0.001 × 已行进距离 时视为击中表面;超过 40 步或行进超过 10 个单位则视为没有击中,画成背景。raymarch(400, 400, rx, ry, rz, 缩放, 40)。Rust 在 CPU 上为 16 万个像素逐一做光线步进,返回 RGBA 像素数组。texImage2D() 把像素上传为 WebGL 纹理,画一个铺满画布的矩形来显示它。注意:这里 WebGL 只负责显示,所有三维计算都由 Rust/WASM 在 CPU 上完成。页面加载时会先检测 WebGL 环境,检测结果显示在画布下方。
needsRender 标记加 requestAnimationFrame 合并),静止时不占用 CPU。源码crates/graphics/mandelbulb/src/lib.rswww/mandelbulb/index.js