Files
yawn/docs/guide/importing-and-picking.md
T
Ampandheaust 9768765d74 Replace addons with conventional handles
Provide the single-loadout Scene API, SAB-backed meshes, cameras, materials, lights, workers, post effects, and tutorial playgrounds. Batch matching row growth so active GPU loadouts refresh once.

Amp-Thread-ID: https://ampcode.com/threads/T-01a01380-b478-77d0-84a0-102880a5c5ae
Co-authored-by: Heaust Azure <heaust.azure@gmail.com>
2026-08-20 06:39:30 +00:00

1.1 KiB

glTF import and picking

Import off-thread

The shared importer worker fetches and parses glTF/GLB, then the response hydrates Mesh and PBRMaterial handles attached to your scene.

import { importGltf } from "@yawn/handles";

const meshes = await importGltf(scene, "/models/helmet.glb");
meshes[0].position[1] = 0.5;

The importer handles triangle primitives, external/data buffers, standard vertex attributes, indices, node transforms, and metallic-roughness values. Application-specific extensions remain application policy.

Pick in the BVH worker

const picking = new Picking(scene);
await picking.ready;

canvas.addEventListener("click", async () => {
  const hits = await picking.pick([0, 0, 4], [0, 0, -1]);
  const nearest = hits[0];
  if (nearest) console.log(nearest.id, nearest.distance);
});

The worker reads shared node positions and mesh bounds, updates its BVH when the shared frame counter changes, and returns all AABB hits sorted by distance. You can shortlist or run an exact test afterward.

If row allocations relocated since Picking was created, refresh its shared descriptors:

await picking.refresh();