import { AnimationClip, BufferAttribute, BufferGeometry, Camera, Group, InterleavedBufferAttribute, LoadingManager, Mesh, MeshStandardMaterial, Object3D, Material, SkinnedMesh, Texture, TextureLoader, FileLoader, ImageBitmapLoader, Skeleton, Loader, } from '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 parseAsync(data: ArrayBuffer | string, path: string): Promise } export type GLTFReferenceType = 'materials' | 'nodes' | 'textures' | 'meshes' export interface GLTFReference { materials?: number nodes?: number textures?: number meshes?: number } export class GLTFParser { json: any options: { path: string manager: LoadingManager ktx2Loader: KTX2Loader meshoptDecoder: /* MeshoptDecoder */ any crossOrigin: string requestHeader: { [header: string]: string } } fileLoader: FileLoader textureLoader: TextureLoader | ImageBitmapLoader plugins: { [name: string]: GLTFLoaderPlugin } extensions: { [name: string]: any } associations: Map setExtensions(extensions: { [name: string]: any }): void setPlugins(plugins: { [name: string]: GLTFLoaderPlugin }): void parse(onLoad: (gltf: GLTF) => void, onError?: (event: ErrorEvent) => void): void 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, sourceIndex: number, loader: Loader) => Promise loadImageSource: (sourceIndex: number, 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 loadAnimation: (animationIndex: number) => Promise loadNode: (nodeIndex: number) => Promise loadScene: () => Promise } export interface GLTFLoaderPlugin { beforeRoot?: (() => Promise | null) | undefined afterRoot?: ((result: GLTF) => Promise | null) | undefined loadNode?: ((nodeIndex: number) => 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 createNodeMesh?: ((nodeIndex: number) => Promise | null) | undefined createNodeAttachment?: ((nodeIndex: number) => Promise | null) | undefined }