Skip to content

渲染

v0.1 渲染栈:core 产出 RenderSnapshotrender-three 构建 three 几何 → render-r3f 在 R3F 中 diff 更新。

渲染管线

text
Player.getSnapshot()
  → RenderSnapshot(对象 id → RuntimeState2D)
  → ThreeSceneView.diff(snapshot)
  → Line/ Mesh geometry + basic material
  → R3F Canvas(正交相机 + fit)

Stroke

  • 世界单位 ribbon 几何
  • revealEnd / revealStart:按弧长 trim,支持 Create 动画
  • 闭合轮廓的弧长包含首尾闭合段(v0.1.1 修复)

Fill

  • earcut 三角化(nonzero + 带洞);evenodd 自相交填充推迟至 M9/M16
  • 材质 unlit + transparent,depthWrite: false(2D 画家算法)

线宽

  • 世界单位:直接按场景尺度
  • 像素单位:用 worldPerPixel 换算为 ribbon 宽度(恒定屏幕宽度近似)

IntermactCanvas

tsx
<IntermactCanvas
  program={program}
  autoplay={true}
  seed={42}
  controls={{ timeline: true }}
  style={{ width: "100%", height: 480 }}
/>
  • fit:继承自 Scene2DPropscontain / cover / stretch
  • HiDPIdpr={[1, 2]}
  • resize:R3F + computeFit 重算正交相机

SceneRendererAdapter

render-three 导出 SceneRendererAdapter 接口;默认由 render-r3fSceneView 实现。高级用法可手动组合 useIntermactPlayer + <Canvas> + <SceneView>

相关示例

示例验证点
render/stroke-fill-showcase三行:静态 fill / 纯描边 reveal / Create(描边+填充)
render/zorder-transparencyz 序与半透明
render/dpi-resize容器 resize + HiDPI

Intermact v1.0 — 文档覆盖 Phase-1 / Phase-2 / Phase-3(全阶段)