@needle-tools/gltf-progressive
Version:
three.js support for loading glTF or GLB files that contain progressive loading data
62 lines (61 loc) • 2.1 kB
JavaScript
export { version as VERSION } from "./version.js";
export * from "./extension.js";
export * from "./plugins/index.js";
export { LODsManager } from "./lods_manager.js";
export { setDracoDecoderLocation, setKTX2TranscoderLocation, createLoaders, addDracoAndKTX2Loaders, configureLoader } from "./loaders.js";
export { getRaycastMesh, registerRaycastMesh, useRaycastMeshes } from "./utils.js";
import { addDracoAndKTX2Loaders, configureLoader, createLoaders } from "./loaders.js";
import { NEEDLE_progressive } from "./extension.js";
import { LODsManager } from "./lods_manager.js";
/** Use this function to enable progressive loading of gltf models.
* @param url The url of the gltf model.
* @param renderer The renderer of the scene.
* @param loader The gltf loader.
* @param opts Options.
* @returns The LODsManager instance.
* @example In react-three-fiber:
* ```ts
* const url = 'https://yourdomain.com/yourmodel.glb'
* const { scene } = useGLTF(url, false, false, (loader) => {
* useNeedleGLTFProgressive(url, gl, loader)
* })
* return <primitive object={scene} />
* ```
*/
export function useNeedleProgressive(url, renderer, loader, opts) {
createLoaders(renderer);
addDracoAndKTX2Loaders(loader);
configureLoader(loader, {
progressive: true,
...opts?.hints,
});
loader.register(p => new NEEDLE_progressive(p, url));
const lod = LODsManager.get(renderer);
if (opts?.enableLODsManager !== false) {
lod.enable();
}
return lod;
}
/** Modelviewer */
import { patchModelViewer } from "./plugins/modelviewer.js";
patchModelViewer();
import { getRaycastMesh, isSSR, useRaycastMeshes } from "./utils.js";
if (!isSSR) {
const global = {
gltfProgressive: {
useNeedleProgressive,
LODsManager,
configureLoader,
getRaycastMesh,
useRaycastMeshes,
}
};
if (!globalThis["Needle"]) {
globalThis["Needle"] = global;
}
else {
for (const key in global) {
globalThis["Needle"][key] = global[key];
}
}
}