首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >简单矢量图形+动画DSL

简单矢量图形+动画DSL
EN

Stack Overflow用户
提问于 2022-04-22 02:33:24
回答 2查看 257关注 0票数 1

我正在寻找一个矢量图形格式,支持简单的动画。一开始我认为SVG是最好的。但是SVG动画在库中没有任何支持。还有其他的格式可以使用吗?

我想要一个Rust库,但是编写一个FFI到C或C++库也没有问题。

任何小费都欢迎。

EN

回答 2

Stack Overflow用户

发布于 2022-04-27 12:26:11

SVG有一些很酷的动画功能,即transform: matrix()属性+ CSS transitions。我的个人资料中的个人网页有一个使用CSS动画的SVG示例。

这是我收集到的一些资料,但我不确定是否还有其他图书馆。Three.js链接有大量的附加信息。希望这能有所帮助。

  • 格林斯托克图书馆 -- Greensock动画平台是一套用于脚本动画的工具。GSAP动画任何JavaScript可以触摸的东西,比如CSS,SVG,React和画布。总的来说,GSAP可以以较高的速度操作属性值,这是基于CSS的转换所涉及的核心技术之一。
  • Aframe.io -- A框架是一个基于Three.js的构建虚拟现实(VR)体验的web框架.除了动画之外,它还具有许多其他组件和自定义功能。
  • 四边形SVG --在浏览器编辑器中使用教程等操作SVGs。
  • Gif.js
  • 韦克特Pixlr
  • Three.js库和插件
  • Three.js WebGL

最后,我发现两个使用WebGL/Three.js/SVG动画的非常酷的站点:

票数 2
EN

Stack Overflow用户

发布于 2022-04-30 19:11:44

回答你的问题/要求..。

"..I希望有一个Rust库,但是编写FFI到C或C++库也没有问题。“

我会推荐一些不错的选择,使用Rust,C或C++。

我采用/推荐的方法有两个步骤:首先使用Resvg与SVG交互,然后使用另一个lib来动画。

备选案文1:

请查看流行的Resvg是一个很好的lib 链接,和github 1300星

备选案文2:

请查看活生生的,它也有锈蚀应用程序和样本

代码语言:javascript
运行
复制
// Scaling example in rust
use ux::prelude::*;
use ux::{Surface, Window};

#[derive(Default, Application)]
struct Application {
    window: Window,
}

impl Application {
    fn new() -> Self {
        let app: Self = Default::default();
        app.window
            .set_window_size(512, 512)
            .set_title("UX Framework - Scaling")
            .show()
            .connect_destroy(move |_win| Application::quit());

        app.window.set_background_color(Some(color::GRAY_9));

        let surface = Surface::new();
        surface.set_size(400.0, 400.0);

        // we should also change surface content size to avoid distortion
        surface.set_content_size(400.0, 400.0);
        surface.set_position(56.0, 56.0);

        app.window.set_child(&surface);

        surface.connect_draw(move |_widget, ctx, width, height| {
            ctx.clear_rect(0.0, 0.0, width as f64, height as f64);

            ctx.set_fill_color(color::TEAL_9); // Fill color
            ctx.begin_path();
            ctx.rect(10.0, 10.0, 90.0, 90.0);
            ctx.fill();
    
            ctx.scale(0.6, 0.6);
            ctx.set_fill_color(color::ORANGE_9); // Fill color
            ctx.begin_path();
            ctx.rect(30.0, 30.0, 90.0, 90.0);
            ctx.fill();
    
            ctx.scale(0.8, 0.8);
            ctx.set_fill_color(color::INDIGO_9); // Fill color
            ctx.begin_path();
            ctx.rect(50.0, 50.0, 90.0, 90.0);
            ctx.fill();

            false
        });

        app
    }
}

fn main() {
    Application::run();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71962857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档