anvilkit-assets
资产管线 — glTF 加载、动画、程序化网格
anvilkit-assets 提供资产加载和管理能力,包括 glTF 模型、骨骼动画和程序化网格生成。
glTF 加载
use anvilkit_assets::gltf_loader::GltfLoader;
let scene = GltfLoader::load("assets/models/character.glb")?;
// 场景包含网格、材质、动画数据
for mesh in &scene.meshes {
println!("网格: {} 顶点, {} 三角形",
mesh.positions.len(),
mesh.indices.len() / 3
);
}骨骼动画
支持三种插值模式:
| 模式 | 说明 |
|---|---|
Linear | 线性插值(位移/缩放用 lerp,旋转用 slerp) |
Step | 阶梯函数,无过渡 |
CubicSpline | 三次样条插值,提供更平滑的动画曲线 |
use anvilkit_assets::animation::*;
// 播放动画
let mut player = AnimationPlayer::new();
player.play(animation_clip, true); // loop = true
// 每帧更新
player.update(dt);
let joint_transforms = player.joint_transforms();程序化网格
use anvilkit_assets::procedural::*;
// 内置几何体
let cube = create_cube(1.0);
let sphere = create_sphere(0.5, 32, 16);
let plane = create_plane(10.0, 10.0);
let cylinder = create_cylinder(0.5, 2.0, 16);
// MeshData 验证
mesh_data.validate()?; // 检查属性数组长度一致性材质
use anvilkit_assets::material::Material;
let material = Material {
base_color: [1.0, 0.8, 0.6, 1.0],
metallic: 0.0,
roughness: 0.7,
albedo_texture: Some(texture_handle),
normal_texture: None,
metallic_roughness_texture: None,
};Asset Server
use anvilkit_assets::asset_server::AssetServer;
let mut server = AssetServer::new("assets/");
let handle = server.load::<Mesh>("models/tree.glb");
// 异步加载状态
match server.get_load_state(handle) {
LoadState::Loading => { /* 等待 */ },
LoadState::Loaded => { /* 可以使用 */ },
LoadState::Failed(err) => { /* 处理错误 */ },
}