AnvilKit

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) => { /* 处理错误 */ },
}

目录