import { TextureFilter, Wrapping } from 'three';
export declare type RGB = [number, number, number];
export declare type RGBA = [number, number, number, number];
export declare type Quaternion = [number, number, number, number];
export declare type Vector3 = [number, number, number];
export declare type Matrix4 = [
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number
];
export declare type Extras = any;
export interface ExtensionDictionary {
    [index: string]: any;
}
export declare type VariantMapping = {
    material: number;
    variants: Array<number>;
};
export declare type VariantMappings = Array<VariantMapping>;
export declare type Variants = Array<{
    name: string;
}>;
export interface PerspectiveCameraIntrinsics {
    aspectRatio?: number;
    yfov: number;
    zfar: number;
    znear: number;
    extensions?: ExtensionDictionary;
    extras?: Extras;
}
export interface OrthographicCameraIntrinsics {
    xmag: number;
    ymag: number;
    zfar: number;
    znear: number;
    extensions?: ExtensionDictionary;
    extras?: Extras;
}
export declare type CameraType = 'perspective' | 'orthographic';
export interface PerspectiveCamera {
    name?: string;
    type: 'perspective';
    perspective?: PerspectiveCameraIntrinsics;
    extensions?: ExtensionDictionary;
    extras?: Extras;
}
export interface OrthographicCamera {
    name?: string;
    type: 'orthographic';
    orthographic?: OrthographicCamera;
    extensions?: ExtensionDictionary;
    extras?: Extras;
}
export declare type Camera = PerspectiveCamera | OrthographicCamera;
export declare enum Filter {
    Nearest = 9728,
    Linear = 9729,
    NearestMipmapNearest = 9984,
    LinearMipmapNearest = 9985,
    NearestMipmapLinear = 9986,
    LinearMipmapLinear = 9987
}
export declare type NearestFilter = Filter.Nearest;
export declare type LinearFilter = Filter.Linear;
export declare type NearestMipmapNearestFilter = Filter.NearestMipmapNearest;
export declare type LinearMipmapNearestFilter = Filter.LinearMipmapNearest;
export declare type NearestMipmapLinearFilter = Filter.NearestMipmapLinear;
export declare type LinearMipmapLinearFilter = Filter.LinearMipmapLinear;
export declare type MagFilter = NearestFilter | LinearFilter | TextureFilter;
export declare type MinFilter = NearestFilter | LinearFilter | NearestMipmapNearestFilter | LinearMipmapNearestFilter | NearestMipmapLinearFilter | LinearMipmapLinearFilter | TextureFilter;
export declare enum Wrap {
    ClampToEdge = 33071,
    MirroredRepeat = 33648,
    Repeat = 10497
}
export declare type ClampToEdgeWrap = Wrap.ClampToEdge;
export declare type MirroredRepeatWrap = Wrap.MirroredRepeat;
export declare type RepeatWrap = Wrap.Repeat;
export declare type WrapMode = RepeatWrap | ClampToEdgeWrap | MirroredRepeatWrap | Wrapping;
export interface Sampler {
    name?: string;
    magFilter?: MagFilter;
    minFilter?: MinFilter;
    wrapS?: WrapMode;
    wrapT?: WrapMode;
    extensions?: ExtensionDictionary;
    extras?: Extras;
}
export interface Texture {
    name?: string;
    sampler?: number;
    source?: number;
    extensions?: ExtensionDictionary;
    extras?: Extras;
}
export interface TextureInfo {
    index: number;
    texCoord?: number;
    extensions?: ExtensionDictionary;
    extras?: Extras;
}
export interface OcclusionTextureInfo extends TextureInfo {
    strength?: number;
}
export interface NormalTextureInfo extends TextureInfo {
    scale?: number;
}
export interface PBRMetallicRoughness {
    baseColorFactor?: RGBA;
    baseColorTexture?: TextureInfo;
    metallicRoughnessTexture?: TextureInfo;
    metallicFactor?: number;
    roughnessFactor?: number;
    extensions?: ExtensionDictionary;
    extras?: Extras;
}
export declare type AlphaMode = 'OPAQUE' | 'MASK' | 'BLEND';
export interface Material {
    name?: string;
    doubleSided?: boolean;
    alphaMode?: AlphaMode;
    alphaCutoff?: number;
    emissiveFactor?: RGB;
    pbrMetallicRoughness?: PBRMetallicRoughness;
    normalTexture?: NormalTextureInfo;
    occlusionTexture?: OcclusionTextureInfo;
    emissiveTexture?: TextureInfo;
    extensions?: ExtensionDictionary;
    extras?: Extras;
}
export interface KHRMaterialsVariants {
    mappings: VariantMapping[];
}
export declare type AttributeDictionary = {
    [index: string]: number;
};
export interface Primitive {
    attributes: AttributeDictionary;
    indices?: number;
    material?: number;
    extensions?: ExtensionDictionary;
    extras?: Extras;
}
export interface Mesh {
    name?: string;
    primitives: Primitive[];
    weights: number[];
    extensions?: ExtensionDictionary;
    extras?: Extras;
}
export interface Node {
    name?: string;
    mesh?: number;
    matrix?: Matrix4;
    rotation?: Quaternion;
    scale?: Vector3;
    translation?: Vector3;
    weights?: number[];
    children?: number[];
    extensions?: ExtensionDictionary;
    extras?: Extras;
}
export interface Image {
    name?: string;
    uri?: string;
    bufferView?: number;
    mimeType?: string;
    extensions?: ExtensionDictionary;
    extras?: Extras;
}
export interface Scene {
    name?: string;
    nodes: number[];
    extensions?: ExtensionDictionary;
    extras?: Extras;
}
export declare type AccessorType = 'SCALAR' | 'VEC2' | 'VEC3' | 'VEC4' | 'MAT2' | 'MAT3' | 'MAT4';
export interface Accessor {
    name?: string;
    bufferView?: number;
    byteOffset?: number;
    componentType: number;
    normalized?: boolean;
    count: number;
    type: AccessorType;
    max?: number;
    min?: number;
    extensions?: ExtensionDictionary;
    extras?: Extras;
    sparse?: any;
}
export declare type ChannelTargetPath = 'rotation' | 'scale' | 'translation' | 'weights';
export interface ChannelTarget {
    node: number;
    path: ChannelTargetPath;
}
export interface Channel {
    sampler: number;
    target: ChannelTarget;
    extensions?: ExtensionDictionary;
    extras?: Extras;
}
export declare type AnimationInterpolation = 'LINEAR' | 'STEP' | 'CUBICSPLINE';
export interface AnimationSampler {
    input: number;
    interpolation: AnimationInterpolation;
    output: number;
    extensions?: ExtensionDictionary;
    extras?: Extras;
}
export interface Animation {
    name?: string;
    channels: Channel[];
    samplers: AnimationSampler[];
    extensions?: ExtensionDictionary;
    extras?: Extras;
}
export interface Skin {
    inverseBindMatrices?: number;
    skeleton?: number;
    joints: number[];
    name?: string;
    extensions?: ExtensionDictionary;
    extras?: Extras;
}
export declare type GLTFElement = Scene | Node | Mesh | Material | Image | Texture | TextureInfo | Sampler | PBRMetallicRoughness | Accessor | Camera | Animation | AnimationSampler | Skin;
export interface GLTFElementMap {
    'scene': Scene;
    'node': Node;
    'mesh': Mesh;
    'material': Material;
    'image': Image;
    'texture': Texture;
    'texture-info': TextureInfo;
    'sampler': Sampler;
    'accessor': Accessor;
    'camera': Camera;
    'animation': Animation;
    'animation-sampler': AnimationSampler;
    'skin': Skin;
}
export interface Asset {
    version: '2.0';
    copyright?: string;
    generator?: string;
    minVersion?: string;
    extensions?: ExtensionDictionary;
    extras?: Extras;
}
export interface GLTF {
    asset: Asset;
    scene?: number;
    scenes?: Scene[];
    nodes?: Node[];
    materials?: Material[];
    accessors?: Accessor[];
    samplers?: Sampler[];
    images?: Image[];
    textures?: Texture[];
    meshes?: Mesh[];
    cameras?: Camera[];
    animations?: Animation[];
    skins?: Skin[];
}
