import { AnimationClip, BufferAttribute, BufferGeometry, Camera, Group, InterleavedBufferAttribute, Loader, LoadingManager, Mesh, MeshStandardMaterial, Object3D, Material, SkinnedMesh, Texture, } from '../../../src/Three'; import { DRACOLoader } from './DRACOLoader'; import { KTX2Loader } from './KTX2Loader'; export interface GLTF { animations: AnimationClip[]; scene: Group; scenes: Group[]; cameras: Camera[]; asset: { copyright?: string | undefined; generator?: string | undefined; version?: string | undefined; minVersion?: string | undefined; extensions?: any; extras?: any; }; parser: GLTFParser; userData: any; } export class GLTFLoader extends Loader { constructor(manager?: LoadingManager); dracoLoader: DRACOLoader | null; load( url: string, onLoad: (gltf: GLTF) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void, ): void; loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise; setDRACOLoader(dracoLoader: DRACOLoader): GLTFLoader; register(callback: (parser: GLTFParser) => GLTFLoaderPlugin): GLTFLoader; unregister(callback: (parser: GLTFParser) => GLTFLoaderPlugin): GLTFLoader; setKTX2Loader(ktx2Loader: KTX2Loader): GLTFLoader; setMeshoptDecoder(meshoptDecoder: /* MeshoptDecoder */ any): GLTFLoader; parse( data: ArrayBuffer | string, path: string, onLoad: (gltf: GLTF) => void, onError?: (event: ErrorEvent) => void, ): void; } export type GLTFReferenceType = 'materials' | 'nodes' | 'textures' | 'meshes'; export interface GLTFReference { materials?: number; nodes?: number; textures?: number; meshes?: number; } export class GLTFParser { json: any; associations: Map; getDependency: (type: string, index: number) => Promise; getDependencies: (type: string) => Promise; loadBuffer: (bufferIndex: number) => Promise; loadBufferView: (bufferViewIndex: number) => Promise; loadAccessor: (accessorIndex: number) => Promise; loadTexture: (textureIndex: number) => Promise; loadTextureImage: ( textureIndex: number, /** * GLTF.Image * See: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/schema/image.schema.json */ source: { [key: string]: any }, loader: Loader, ) => Promise; assignTexture: ( materialParams: { [key: string]: any }, mapName: string, mapDef: { index: number; texCoord?: number | undefined; extensions?: any; }, ) => Promise; assignFinalMaterial: (object: Mesh) => void; getMaterialType: () => typeof MeshStandardMaterial; loadMaterial: (materialIndex: number) => Promise; createUniqueName: (originalName: string) => string; createNodeMesh: (nodeIndex: number) => Promise; loadGeometries: ( /** * GLTF.Primitive[] * See: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/schema/mesh.primitive.schema.json */ primitives: Array<{ [key: string]: any }>, ) => Promise; loadMesh: (meshIndex: number) => Promise; loadCamera: (cameraIndex: number) => Promise; loadSkin: (skinIndex: number) => Promise<{ joints: number[]; inverseBindMatrices?: BufferAttribute | InterleavedBufferAttribute | undefined; }>; loadAnimation: (animationIndex: number) => Promise; loadNode: (nodeIndex: number) => Promise; loadScene: () => Promise; } export interface GLTFLoaderPlugin { beforeRoot?: (() => Promise | null) | undefined; afterRoot?: ((result: GLTF) => Promise | null) | undefined; loadMesh?: ((meshIndex: number) => Promise | null) | undefined; loadBufferView?: ((bufferViewIndex: number) => Promise | null) | undefined; loadMaterial?: ((materialIndex: number) => Promise | null) | undefined; loadTexture?: ((textureIndex: number) => Promise | null) | undefined; getMaterialType?: ((materialIndex: number) => typeof Material | null) | undefined; extendMaterialParams?: | ((materialIndex: number, materialParams: { [key: string]: any }) => Promise | null) | undefined; createNodeAttachment?: ((nodeIndex: number) => Promise | null) | undefined; }