我正在寻找一个矢量图形格式,支持简单的动画。一开始我认为SVG是最好的。但是SVG动画在库中没有任何支持。还有其他的格式可以使用吗?
我想要一个Rust库,但是编写一个FFI到C或C++库也没有问题。
任何小费都欢迎。
发布于 2022-04-27 12:26:11
SVG有一些很酷的动画功能,即transform: matrix()
属性+ CSS transitions
。我的个人资料中的个人网页有一个使用CSS动画的SVG示例。
这是我收集到的一些资料,但我不确定是否还有其他图书馆。Three.js链接有大量的附加信息。希望这能有所帮助。
最后,我发现两个使用WebGL/Three.js/SVG动画的非常酷的站点:
发布于 2022-04-30 19:11:44
回答你的问题/要求..。
"..I希望有一个Rust库,但是编写FFI到C或C++库也没有问题。“
我会推荐一些不错的选择,使用Rust,C或C++。
我采用/推荐的方法有两个步骤:首先使用Resvg与SVG交互,然后使用另一个lib来动画。
备选案文1:
请查看流行的Resvg是一个很好的lib 链接,和github 1300星
备选案文2:
// 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();
}
https://stackoverflow.com/questions/71962857
复制相似问题