动画不就是图像的一系列变换的可视化嘛。我对这个挺感兴趣的,并且我还跃跃欲试,目前有两个站在巨人的肩膀上的方案。个人感觉是非常有可行性的,而且难度不会特别大。
一个是利用游戏引擎,例如最近新出的Cocos Creator3.0版本是一个完全3D的游戏引擎,一个游戏引擎已经把开发环境、渲染优化、调试等非常多的方面做好了,可以实时做到在浏览器上调试。Cocos Creator可以用JS或者TS进行开发,利用它实例化一个sprite
节点就可以在屏幕上渲染出一个实例,再利用缓动系统 cc.Tween
就可以实现sprite
的动画效果(例如移动、放缩、旋转、染色、透明度等),甚至可以给它加一个shader来实现更加高级的动画效果。缓动系统已经包含了许多已经写好的缓动函数(类似manim那样),例如smooth,fadeIn,fadeOut,sineIn,sineOut
等等。
使用Label
就可以创建文字,当然可以设置字体样式、颜色等属性,如果结合KaTeX或者MathJax来生成图像,就可以渲染公式了。
不过其还是有劣势的,就是Cocos Creator游戏引擎对SVG的支持并不是很好,但自己造个轮子实现SVG的渲染,然后实现像Manim那样的TransForm应该是可行的。
第二个方案是使用3D建模/动画软件 Blender ,不过这就是一个Python的故事了。Blender这个软件完全开放了大量的Python API,可以直接使用这些API进行操作(例如放置一个立方体、设置材质、改变位置、缩放、质量等等),同样也支持通过设置shader实现非常高级的动画效果。当然,三维的物体也不过是一堆三角形的面和点嘛,也可以像Manim那样实现点的映射,然后通过点的平移动画实现看起来非常高级的TransForm动画。当然在调试方面就直接依赖于Blender了,优势是这个的扩展性非常高,不仅可以直接在软件内预览,还可以使用Blender渲染导出任意分辨率格式的视频(Blender正如它的名字,几乎干啥都行<三维建模、三维或者二维动画、绘画、渲染器、视频剪辑等等>)。劣势是这个工作量会比较大。
如果觉得我的想法不错的话,其实我们可以一起去把它实现 : )