End-to-end 3D demo wiring Blinc’s SceneKit3D renderer up to
blinc_canvas_kit::SceneKit3D— the camera + light + mesh dispatch front-end used by any Blinc app that wants to drop 3D content into acanvas(). Same primitive demos use for a single spinning cube scale up to a full character rig unchanged.blinc_gltf— glTF 2.0 loader. Parses the file tree once at startup into aGltfScene(meshes, nodes, skeletons, animation clips) that the demo holds behind anArc<Mutex<>>and borrows per frame.blinc_skeleton— runtime poser.animate_scene_nodessamples the clip’s TRS channels into the live node tree;scene_skinning_datawalks the posed tree to build the joint matrices the mesh shader consumes;animate_scene_morph_weightsdrives per-node blend-shape weights for facial expression.
The asset is “The Strangler” by Jungle Jim (CC-BY-4.0;
https://sketchfab.com/3d-models/the-strangler-06d56efabf7445e89bb1bf41a99d08cc),
shipped in the repo for offline reproducibility. Full
attribution lives alongside the asset in
examples/.../assets/3d/the_strangler/license.txt.
Per-frame flow:
animate_scene_nodes(&mut scene, anim, t)— writes sampled TRS onto scene nodesscene_skinning_data(&scene, &skeleton)— returnsSkinningData(joint world matrices × inverse-bind)animate_scene_morph_weights(anim, t)— returns aHashMap<node_index, Vec<f32>>of current weights- For each drawable node: shallow-clone its
MeshData(Arc<Vec<_>>inners → refcount bumps, no vertex copy), stamp the frame’s skinning + morph_weights, dispatch viaDrawContext::draw_mesh_data.
Ordering (OPAQUE before BLEND) is enforced framework-side in
blinc_app::dispatch_pending_meshes, so the demo submits in
scene-graph order without its own sort.
cargo run -p blinc_app_examples --example strangler_demo \
--features windowed --release
Tip: Some demos are best viewed in a full browser window. Click “Open in a new tab” below for the full experience.