这篇文章主要介绍了rust下的图形绘制库valora有什么特性,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
下面我们参考valora网站上的教程来体验绘制功能
cargo version
: cargo 1.45.0-nightly (9fcb8c1d2 2020-05-25)rustc --version
: rustc 1.45.0-nightly (56daaf669 2020-06-03)初始化新的rust工程之后使用命令安装
cargo install cargo-edit && cargo add valora
注意:由于valora的依赖项中有些包使用了测试版本,所以需要使用rustc nightly版本才能顺利安装。如果使用rustc stable版本会报错。
切换stable到nightly版本
rustup default nightly
接下来我们通过valora主页中Introduction部分的例子来体验绘制功能
原始代码如下:
use valora::prelude::*;
fn main() -> Result<()> {
run_fn(Options::from_args(), |_gpu, world, _rng| {
Ok(move |ctx: Context, canvas: &mut Canvas| {
canvas.set_color(LinSrgb::new(1., 1., 1.));
canvas.paint(Filled(ctx.world));
let max_radius = world.width / 3.;
let radius = ctx.time.as_secs_f32().cos().abs() * max_radius;
canvas.set_color(LinSrgb::new(1., 0., 0.));
canvas.paint(Filled(Ellipse::circle(world.center(), radius)));
})
})
}
接下来我们通过修改原始代码中的一些参数来体验valora绘制的可玩性。
首先我们准备对例子中的背景色和圆形色彩下手。至于例子代码中相对细节的ctx
, _gpu
等关键部分现阶段可以不用深入了解。
valora使用的色彩定义LinSrgb
是均一化的rgb,通常来说rgb取值范围为0 ~ 255
,均一化就是0 ~ 1
。值得注意的是赋值使用了浮点数(1., 0., 0.)
,一般来说图形范畴内使用浮点数很普遍。
有了这些概念我们可以去找个在线color picker去选择一下我们想要的背景色和圆的颜色。
经过一番picker之后
rgb(153, 204, 255)
,类似天空蓝色。rgb(255, 153, 51)
那么我们把选定的色彩粘贴到代码中,同时做个均一化的除法
// color of background
canvas.set_color(LinSrgb::new(153./255., 204./255., 255./255.));
// color of circle
canvas.set_color(LinSrgb::new(255./255., 153./255., 51./255.));
原始代码中圆形只是在中间位置scale缩放,有点呆。
结合一点写代码的背景知识,一般来说带有绘制功能的视觉库都是用一个二维或者三位维向量来做位置参数,旋转用个3X3矩阵之类的套路。
再结合一点线性代数知识,向量外层乘以固定系数应该还是个向量。
那么我们直接把上面负责变形的代码复制粘贴到位置矩阵旁边,同时做个乘法,让圆心的x和y等尺度变化。
这样就可以实现了类似高空摄像机向下拍摄一个弹跳皮球运动的视觉误差,复制粘贴走起(主要是懒)
canvas.paint(Filled(Ellipse::circle(world.center() * ctx.time.as_secs_f32().cos().abs(), radius)));
修改之后运行一下看看效果,还凑合
感谢你能够认真阅读完这篇文章,希望小编分享的“rust下的图形绘制库valora有什么特性”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。