内容提要
在Supabase的第八次启动周中,团队创建了一个以用户生成的票据为主题的动画“星座”。他们使用React Three Fiber和Three.js构建了一个动态夜空,用户注册时生成星星,形成“8”字形。通过调整粒子的运动和外观,团队实现了实时更新和有趣的动画效果。
延伸解读
技术选型:为何选择React Three Fiber
文章提到,团队曾考虑SVG路径动画或2D动画库(如Framer Motion、gsap、PixiJS),但最终选择了Three.js配合React Three Fiber(R3F)。R3F抽象了相机、渲染器等复杂性,提供了更强大的工具集,便于实现随机化和形状调整。对于需要复杂3D效果和实时更新的项目,R3F是一个值得考虑的选择。
动画核心:三角函数与时间变量
动画通过useFrame钩子获取时间变量,利用Math.sin和Math.cos函数控制粒子的x和y位置,形成水平振荡和圆周运动。通过计算周长并判断循环次数的奇偶性,反转cos符号,从而绘制出“8”字形。这种基于数学的动画方法灵活且易于调整参数。
调试与优化:GUI工具的作用
团队添加了dat.gui库创建GUI界面,实时调整粒子数量、半径、随机性等参数,并可视化形状。这有助于收集反馈和优化设计。在URL后添加#debug即可启用调试模式。对于复杂动画,GUI工具能显著提升开发效率和最终效果。
Q&A
Supabase的第八次启动周中,团队创建了什么主题的动画?
团队创建了一个以用户生成的票据为主题的动画“星座”。
使用了哪些技术来构建动态夜空?
使用了React Three Fiber和Three.js来构建动态夜空。
如何实现星星的实时更新?
通过从Supabase数据库中加载用户注册信息,实时更新星星的显示。
在动画中,如何调整粒子的运动和外观?
通过使用useFrame和三角函数来动画化粒子的运动,调整其位置和外观。
团队是如何优化最终设计的?
通过添加GUI工具,团队能够可视化形状并收集反馈,从而优化最终设计。
创建星座的过程中使用了哪些数学概念?
使用了三角函数和时间变量来实现粒子的运动和形状。