SuperAPI AI 工具集

r3f-fundamentals

前端与建站

查看项目

更新于 10-15 21:38

技能介绍

用途:帮助在 React 项目中搭建 React Three Fiber(R3F)场景,覆盖 Canvas、类型化 JSX、hooks 与资源归属,适合场景架构与渲染循环设置,而非细节建模。

版本基线:先查看项目 manifest 与 lockfile 再选 API。示例面向 Fiber 9 / React 19,Fiber 8 对应 React 18,不要仅为套用示例而升级项目。同时核对已安装的 Three.js 与 Drei 版本,使用与版本匹配的已发布文档;若无对应文档,应说明不确定而非臆造 props。除非任务要求更换渲染器,否则保留现有渲染器。WebGPU 需查阅渲染器选择;Fiber 10 alpha API 不等于 Fiber 9 API。

最小场景:示例自行持有 Canvas,其父元素必须有非零高度。使用 Canvas、useFrame、ThreeElements 与 Mesh 类型,在 Canvas 下的组件中调用 useThree、useFrame 和 loader hooks,不要在创建 Canvas 的组件或事件回调中调用。Canvas 子元素是 Three.js 对象,DOM UI 放在外部或使用 Drei Html。

类型与对象:mesh props 用 ThreeElements['mesh'],ref 用 useRef<Mesh>(null)。Fiber 9 自定义元素用 ThreeElement<typeof Class>,不要用已移除的 Object3DNode 或全局 JSX.IntrinsicElements 增强。extend(Class) 创建局部类型组件;需要共享小写 JSX 元素时用 extend({ Class }) 加模块增强。args 是构造参数,改变会重建对象;动画应更新普通 props 或 refs。几何体/材质子元素自动 attach,其他属性用显式 attach。Three.js 使用弧度与局部变换。

渲染循环:离散 UI 变化用 React state,逐帧运动改自有 ref,复用临时向量并以秒为单位使用 delta,不要为同一场景创建第二个动画循环。默认 frameloop="always" 适合连续动画;可静止场景用 "demand",命令式改动需 invalidate(),动画需持续 invalidate 直到稳定。负帧优先级用于排序更新,正优先级会禁用自动渲染。

渲染器与归属:默认 WebGL Canvas 使用 sRGB 输出与 ACES filmic 色调映射。Three.js r182+ 用 shadows="percentage" 获得 PCF 阴影。R3F 在卸载时释放声明式拥有的对象,primitive 不会释放传入对象,缓存 loader 资源与共享资源需显式归属。dispose={null} 仅让子树退出自动释放,不是通用性能开关。

验证:类型检查、浏览器渲染、查看控制台、调整尺寸、卸载/重挂载;demand 渲染需验证唤醒与回到空闲。

限制:资料未提供收费、价格、平台与效果信息。