千家信息网

rust下的图形绘制库valora有什么特性

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章主要介绍了rust下的图形绘制库valora有什么特性,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。valora特性valor
千家信息网最后更新 2025年01月31日rust下的图形绘制库valora有什么特性

这篇文章主要介绍了rust下的图形绘制库valora有什么特性,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。


valora特性

  • valora包含了rng(Random Number Generator)
  • 在不改变composition scale的情况下复现任意分辨率的图形
  • 使用了type-safe color可以保证色彩的印刷一致性
  • 充分利用硬件资源
  • 充分利用Rust特性,大幅减少了调试工作量

下面我们参考valora网站上的教程来体验绘制功能

开发环境

  • Windows 10
  • 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绘制功能

接下来我们通过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有什么特性"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

代码 图形 特性 功能 版本 篇文章 色彩 体验 原始 均一 位置 例子 同时 向量 圆形 知识 背景 接下来 一般来说 参数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库安全性控制的一般方法 php取数据库 我的世界宝可梦等价生存服务器 广州坦途网络技术有限公司 辽宁调度服务器报价 无线传感器网络技术考点 长宁区网络软件开发定制大概费用 甘肃软件开发外包报价 宁夏软件开发哪家好 电脑备忘录软件开发 请求服务器失败了怎么办 jsp获取数据库数据排列 二连浩特软件开发 数据库班级号怎么表示 普洱网络安全工程师招聘 腾讯云服务器哪个系统最好 access数据库 同时访问 登入cf一直显示服务器人数已满 网络安全法是什么时候发布 怎样删除mysql数据库 神通数据库授权查询 网络技术与英语教研活动 云服务器 百兆 网络延迟造成数据库连接挂死 网络安全和测试运维哪个好学 建筑项目软件开发 大学里是不是都有自己的数据库 网络技术科学有限公司 网页post发送请求给数据库 软件开发教学软件有那些
0