28个版本
0.1.27 | 2024年7月28日 |
---|---|
0.1.26 | 2024年7月24日 |
0.1.24 | 2024年6月30日 |
0.1.16 | 2024年5月30日 |
0.1.5 | 2024年4月30日 |
#374 in 游戏开发
每月 339 次下载
用于 bevy_curvo
215KB
5K SLoC
Curvo
Curvo是一个Rust语言的NURBS曲线/曲面建模库。
bevy上的可视化
此库不仅可以创建由控制点、结点矢量和每个控制点相关的权重组成的NURBS曲线,还支持生成精确通过给定控制点的曲线和创建周期性曲线。此外,它还允许通过基于NURBS曲线的拉伸和放样操作来构建NURBS曲面。
此库支持的NURBS曲面建模操作包括以下内容
- 拉伸
- 放样
- 扫描
- 旋转
支持的功能还包括在NURBS曲线上找到最近点、在两个NURBS曲线之间找到交点和基于弧长进行分割。
其他功能如下
使用方法
// Create a set of points to interpolate
let points = vec![
Point3::new(-1.0, -1.0, 0.),
Point3::new(1.0, -1.0, 0.),
Point3::new(1.0, 1.0, 0.),
Point3::new(-1.0, 1.0, 0.),
Point3::new(-1.0, 2.0, 0.),
Point3::new(1.0, 2.5, 0.),
];
// Create a NURBS curve that interpolates the given points with degree 3
// You can also specify the precision of the curve by generic type (f32 or f64)
let interpolated = NurbsCurve3D::<f64>::try_interpolate(&points, 3).unwrap();
// NURBS curve & surface can be transformed by nalgebra's matrix
let rotation = Rotation3::from_axis_angle(&Vector3::z_axis(), FRAC_PI_2);
let translation = Translation3::new(0., 0., 3.);
let transform_matrix = translation * rotation; // nalgebra::Isometry3
// Transform the curve by the given matrix (nalgebra::Isometry3 into nalgebra::Matrix4)
let offsetted = interpolated.transformed(&transform_matrix.into());
// Create a NURBS surface by lofting two NURBS curves
let lofted = NurbsSurface::try_loft(
&[interpolated, offsetted],
Some(3), // degree of v direction
).unwrap();
// Tessellate the surface in adaptive manner about curvature for efficient rendering
let option = AdaptiveTessellationOptions {
norm_tolerance: 1e-4,
..Default::default()
};
let tessellation = lofted.tessellate(Some(option));
依赖关系
- nalgebra:此库在执行计算时严重依赖线性代数库nalgebra。
参考
依赖关系
~9–50MB
~868K SLoC