← 返回项目空间

DOM-FIRST WEBGL / REACT THREE FIBER

Viselora DOM WebGL

让网页保留自己的结构,也拥有空间与运动。

阅读完整案例 ↓

面向 React 19 与 Next.js 的 DOM-first WebGL 协调运行时。以公开接口连接语义 DOM 和单一 React Three Fiber 场景,负责测量、共享进度与回退状态;渲染、材质、模型和运动由 R3F 与 Three.js 承担。

当网页内容进入三维画面

文字、图片、链接和阅读顺序原本由网页组织。当它们进入 WebGL 画面,布局、坐标、鼠标命中、滚动响应和资源释放也需要相互配合。每一种视觉效果单独维护这些关系,会让后续组合与修改越来越困难。

Viselora 从 DOM 出发:网页保留内容、布局与可访问性的基础,运行时把需要视觉表现的目标连接到 WebGL。0.2 版本收拢到 DOM 协调,让应用直接使用 R3F 组件表达场景,减少另一套渲染抽象。

从网页内容到空间表达

  1. 组织 DOM由语义元素保留内容、链接、布局与阅读顺序。
  2. 声明视觉目标注册需要视觉替代的语义 DOM 目标。
  3. 测量与投影运行时连接 DOM 几何与场景坐标。
  4. 接入共同输入以滚动进度、时间线与指针状态驱动效果。
  5. 渲染画面在原生 R3F 组件中表达材质、灯光和运动。
  6. 管理生命周期报告视觉就绪,并按资源归属处理缓存与清理。

用声明连接内容与视觉

语义元素通过 WebGLTarget 注册,应用用 useDOMTarget 读取实时几何、可见性和内容版本。文字测量与纹理工具连接 DOM 排版;图片、视频与模型使用 Three.js、R3F 或 Drei 加载。

网页内容留在 children,原生 R3F 组件放入同一运行时的 scene。网格、材质、相机和灯光直接使用生态接口,逐帧变化在 useFrame 中完成;应用负责自身资源的创建与释放,不再经过旧版对象或材质 facade。

把生命周期放在同一处

每个运行时承载一个 R3F Canvas,由 R3F 独占渲染与帧循环。Viselora 集中处理 DOM 测量、共享输入、离屏可见性和观察器清理;应用负责纹理、模型实例与材质等资源,共享加载缓存有单独的释放边界。

替代 DOM 绘制的视觉对象需要明确报告 readiness,并携带加载时捕获的目标身份,避免旧加载结果影响新节点。WebGL 不可用时恢复语义内容;离屏策略控制原内容的可见性,应用决定是否保留或卸载视觉资源。

让滚动和交互成为共同输入

Viselora 提供进度信号、时间线与滚动适配能力,可以连接原生滚动,也可以接入 Lenis、GSAP 和 ScrollTrigger。多个视觉对象能够使用一致的进度来源,表达靠近、旋转、展开、阅读和退回等阶段。

三维命中和指针事件交给 R3F,普通链接与键盘操作仍使用 DOM 事件。应用负责交互优先级、触屏替代和减少动态效果;逐帧变化直接更新原生对象,不把每帧进度传入 React state。

从运行时走到一个实际网站

这个个人网站是 Viselora 的实际应用之一。四面体随滚动靠近,面上的内容逐渐与屏幕对齐,再交给可阅读、可交互的正文;人物模型、文章纸卡和项目空间继续使用同一套公开运行时能力。

网页布局、链接与移动端阅读由站点负责,三维投影、材质和运动由同一场景中的原生 R3F 组件表达。站点作为独立项目安装已发布的 0.2 npm 包,让精简后的公共接口接受真实使用场景的检验。

将具体效果整理成可复用示例

示例项目展示原生 R3F 场景与 DOM 目标、文字纹理、模型和滚动进度的组合。开发者可以阅读公开接口示例与迁移指引,再使用熟悉的 Three.js/R3F 生态组织自己的视觉组件。

这些模块属于应用层示例,视觉与内容由调用方组织;运行时包继续承担通用能力。接口文档、能力状态说明和面向 Agent 的使用指引,帮助使用者区分公开入口、实际证据与应用自己的责任。

当前阶段与适用范围

项目处于 0.2.0-alpha.0 预发布阶段,核心运行时与滚动适配器分别通过 npm 提供。公开范围集中在单一 Canvas host、DOM 注册与测量、回退可见性、共享进度和文字纹理工具;场景、加载器、拾取、物理与后期处理使用 R3F/Three.js 生态。

当前版本要求 React 19、R3F 9 与 Three.js 0.184,不再支持框架无关调用或旧版托管 API。应用需要安排语义说明、回退内容和资源生命周期;真实设备表现、复杂场景性能和最终视觉效果仍需在具体产品中验证。