///
declare module 'babylonjs-loaders' {
export = BABYLON;
}
declare module BABYLON {
class STLFileLoader implements ISceneLoaderPlugin {
solidPattern: RegExp;
facetsPattern: RegExp;
normalPattern: RegExp;
vertexPattern: RegExp;
name: string;
extensions: ISceneLoaderPluginExtensions;
importMesh(meshesNames: any, scene: Scene, data: any, rootUrl: string, meshes: Nullable, particleSystems: Nullable, skeletons: Nullable): boolean;
load(scene: Scene, data: any, rootUrl: string): boolean;
private isBinary(data);
private parseBinary(mesh, data);
private parseASCII(mesh, solidData);
}
}
declare module BABYLON {
/**
* Class reading and parsing the MTL file bundled with the obj file.
*/
class MTLFileLoader {
materials: BABYLON.StandardMaterial[];
/**
* This function will read the mtl file and create each material described inside
* This function could be improve by adding :
* -some component missing (Ni, Tf...)
* -including the specific options available
*
* @param scene
* @param data
* @param rootUrl
*/
parseMTL(scene: BABYLON.Scene, data: string, rootUrl: string): void;
/**
* Gets the texture for the material.
*
* If the material is imported from input file,
* We sanitize the url to ensure it takes the textre from aside the material.
*
* @param rootUrl The root url to load from
* @param value The value stored in the mtl
* @return The Texture
*/
private static _getTexture(rootUrl, value, scene);
}
class OBJFileLoader implements ISceneLoaderPlugin {
static OPTIMIZE_WITH_UV: boolean;
name: string;
extensions: string;
obj: RegExp;
group: RegExp;
mtllib: RegExp;
usemtl: RegExp;
smooth: RegExp;
vertexPattern: RegExp;
normalPattern: RegExp;
uvPattern: RegExp;
facePattern1: RegExp;
facePattern2: RegExp;
facePattern3: RegExp;
facePattern4: RegExp;
/**
* Calls synchronously the MTL file attached to this obj.
* Load function or importMesh function don't enable to load 2 files in the same time asynchronously.
* Without this function materials are not displayed in the first frame (but displayed after).
* In consequence it is impossible to get material information in your HTML file
*
* @param url The URL of the MTL file
* @param rootUrl
* @param onSuccess Callback function to be called when the MTL file is loaded
* @private
*/
private _loadMTL(url, rootUrl, onSuccess);
importMesh(meshesNames: any, scene: Scene, data: any, rootUrl: string, meshes: Nullable, particleSystems: Nullable, skeletons: Nullable): boolean;
load(scene: Scene, data: string, rootUrl: string): boolean;
/**
* Read the OBJ file and create an Array of meshes.
* Each mesh contains all information given by the OBJ and the MTL file.
* i.e. vertices positions and indices, optional normals values, optional UV values, optional material
*
* @param meshesNames
* @param scene BABYLON.Scene The scene where are displayed the data
* @param data String The content of the obj file
* @param rootUrl String The path to the folder
* @returns Array
* @private
*/
private _parseSolid(meshesNames, scene, data, rootUrl);
}
}
declare module BABYLON {
enum GLTFLoaderCoordinateSystemMode {
AUTO = 0,
PASS_THROUGH = 1,
FORCE_RIGHT_HANDED = 2,
}
interface IGLTFLoaderData {
json: Object;
bin: Nullable;
}
interface IGLTFLoader extends IDisposable {
importMeshAsync: (meshesNames: any, scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess: (meshes: Nullable, particleSystems: Nullable, skeletons: Nullable) => void, onProgress: (event: ProgressEvent) => void, onError: (message: string) => void) => void;
loadAsync: (scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess: () => void, onProgress: (event: ProgressEvent) => void, onError: (message: string) => void) => void;
}
class GLTFFileLoader implements IDisposable, ISceneLoaderPluginAsync {
static CreateGLTFLoaderV1: (parent: GLTFFileLoader) => IGLTFLoader;
static CreateGLTFLoaderV2: (parent: GLTFFileLoader) => IGLTFLoader;
onParsed: (data: IGLTFLoaderData) => void;
static HomogeneousCoordinates: boolean;
static IncrementalLoading: boolean;
coordinateSystemMode: GLTFLoaderCoordinateSystemMode;
onTextureLoaded: (texture: BaseTexture) => void;
onMaterialLoaded: (material: Material) => void;
/**
* Let the user decides if he needs to process the material (like precompilation) before affecting it to meshes
*/
onBeforeMaterialReadyAsync: (material: Material, targetMesh: AbstractMesh, isLOD: boolean, callback: () => void) => void;
/**
* Raised when the asset is completely loaded, just before the loader is disposed.
* For assets with LODs, raised when all of the LODs are complete.
* For assets without LODs, raised when the model is complete just after onSuccess.
*/
onComplete: () => void;
private _loader;
name: string;
extensions: ISceneLoaderPluginExtensions;
dispose(): void;
importMeshAsync(meshesNames: any, scene: Scene, data: any, rootUrl: string, onSuccess: (meshes: AbstractMesh[], particleSystems: ParticleSystem[], skeletons: Skeleton[]) => void, onProgress: (event: ProgressEvent) => void, onError: (message: string) => void): void;
loadAsync(scene: Scene, data: string | ArrayBuffer, rootUrl: string, onSuccess: () => void, onProgress: (event: ProgressEvent) => void, onError: (message: string) => void): void;
canDirectLoad(data: string): boolean;
private static _parse(data, onError);
private _getLoader(loaderData, onError);
private static _parseBinary(data, onError);
private static _parseV1(binaryReader, onError);
private static _parseV2(binaryReader, onError);
private static _parseVersion(version);
private static _compareVersion(a, b);
private static _decodeBufferToText(buffer);
}
}
declare module BABYLON.GLTF1 {
/**
* Enums
*/
enum EComponentType {
BYTE = 5120,
UNSIGNED_BYTE = 5121,
SHORT = 5122,
UNSIGNED_SHORT = 5123,
FLOAT = 5126,
}
enum EShaderType {
FRAGMENT = 35632,
VERTEX = 35633,
}
enum EParameterType {
BYTE = 5120,
UNSIGNED_BYTE = 5121,
SHORT = 5122,
UNSIGNED_SHORT = 5123,
INT = 5124,
UNSIGNED_INT = 5125,
FLOAT = 5126,
FLOAT_VEC2 = 35664,
FLOAT_VEC3 = 35665,
FLOAT_VEC4 = 35666,
INT_VEC2 = 35667,
INT_VEC3 = 35668,
INT_VEC4 = 35669,
BOOL = 35670,
BOOL_VEC2 = 35671,
BOOL_VEC3 = 35672,
BOOL_VEC4 = 35673,
FLOAT_MAT2 = 35674,
FLOAT_MAT3 = 35675,
FLOAT_MAT4 = 35676,
SAMPLER_2D = 35678,
}
enum ETextureWrapMode {
CLAMP_TO_EDGE = 33071,
MIRRORED_REPEAT = 33648,
REPEAT = 10497,
}
enum ETextureFilterType {
NEAREST = 9728,
LINEAR = 9728,
NEAREST_MIPMAP_NEAREST = 9984,
LINEAR_MIPMAP_NEAREST = 9985,
NEAREST_MIPMAP_LINEAR = 9986,
LINEAR_MIPMAP_LINEAR = 9987,
}
enum ETextureFormat {
ALPHA = 6406,
RGB = 6407,
RGBA = 6408,
LUMINANCE = 6409,
LUMINANCE_ALPHA = 6410,
}
enum ECullingType {
FRONT = 1028,
BACK = 1029,
FRONT_AND_BACK = 1032,
}
enum EBlendingFunction {
ZERO = 0,
ONE = 1,
SRC_COLOR = 768,
ONE_MINUS_SRC_COLOR = 769,
DST_COLOR = 774,
ONE_MINUS_DST_COLOR = 775,
SRC_ALPHA = 770,
ONE_MINUS_SRC_ALPHA = 771,
DST_ALPHA = 772,
ONE_MINUS_DST_ALPHA = 773,
CONSTANT_COLOR = 32769,
ONE_MINUS_CONSTANT_COLOR = 32770,
CONSTANT_ALPHA = 32771,
ONE_MINUS_CONSTANT_ALPHA = 32772,
SRC_ALPHA_SATURATE = 776,
}
/**
* Interfaces
*/
interface IGLTFProperty {
extensions?: {
[key: string]: any;
};
extras?: Object;
}
interface IGLTFChildRootProperty extends IGLTFProperty {
name?: string;
}
interface IGLTFAccessor extends IGLTFChildRootProperty {
bufferView: string;
byteOffset: number;
byteStride: number;
count: number;
type: string;
componentType: EComponentType;
max?: number[];
min?: number[];
name?: string;
}
interface IGLTFBufferView extends IGLTFChildRootProperty {
buffer: string;
byteOffset: number;
byteLength: number;
byteStride: number;
target?: number;
}
interface IGLTFBuffer extends IGLTFChildRootProperty {
uri: string;
byteLength?: number;
type?: string;
}
interface IGLTFShader extends IGLTFChildRootProperty {
uri: string;
type: EShaderType;
}
interface IGLTFProgram extends IGLTFChildRootProperty {
attributes: string[];
fragmentShader: string;
vertexShader: string;
}
interface IGLTFTechniqueParameter {
type: number;
count?: number;
semantic?: string;
node?: string;
value?: number | boolean | string | Array;
source?: string;
babylonValue?: any;
}
interface IGLTFTechniqueCommonProfile {
lightingModel: string;
texcoordBindings: Object;
parameters?: Array;
}
interface IGLTFTechniqueStatesFunctions {
blendColor?: number[];
blendEquationSeparate?: number[];
blendFuncSeparate?: number[];
colorMask: boolean[];
cullFace: number[];
}
interface IGLTFTechniqueStates {
enable: number[];
functions: IGLTFTechniqueStatesFunctions;
}
interface IGLTFTechnique extends IGLTFChildRootProperty {
parameters: {
[key: string]: IGLTFTechniqueParameter;
};
program: string;
attributes: {
[key: string]: string;
};
uniforms: {
[key: string]: string;
};
states: IGLTFTechniqueStates;
}
interface IGLTFMaterial extends IGLTFChildRootProperty {
technique?: string;
values: string[];
}
interface IGLTFMeshPrimitive extends IGLTFProperty {
attributes: {
[key: string]: string;
};
indices: string;
material: string;
mode?: number;
}
interface IGLTFMesh extends IGLTFChildRootProperty {
primitives: IGLTFMeshPrimitive[];
}
interface IGLTFImage extends IGLTFChildRootProperty {
uri: string;
}
interface IGLTFSampler extends IGLTFChildRootProperty {
magFilter?: number;
minFilter?: number;
wrapS?: number;
wrapT?: number;
}
interface IGLTFTexture extends IGLTFChildRootProperty {
sampler: string;
source: string;
format?: ETextureFormat;
internalFormat?: ETextureFormat;
target?: number;
type?: number;
babylonTexture?: Texture;
}
interface IGLTFAmbienLight {
color?: number[];
}
interface IGLTFDirectionalLight {
color?: number[];
}
interface IGLTFPointLight {
color?: number[];
constantAttenuation?: number;
linearAttenuation?: number;
quadraticAttenuation?: number;
}
interface IGLTFSpotLight {
color?: number[];
constantAttenuation?: number;
fallOfAngle?: number;
fallOffExponent?: number;
linearAttenuation?: number;
quadraticAttenuation?: number;
}
interface IGLTFLight extends IGLTFChildRootProperty {
type: string;
}
interface IGLTFCameraOrthographic {
xmag: number;
ymag: number;
zfar: number;
znear: number;
}
interface IGLTFCameraPerspective {
aspectRatio: number;
yfov: number;
zfar: number;
znear: number;
}
interface IGLTFCamera extends IGLTFChildRootProperty {
type: string;
}
interface IGLTFAnimationChannelTarget {
id: string;
path: string;
}
interface IGLTFAnimationChannel {
sampler: string;
target: IGLTFAnimationChannelTarget;
}
interface IGLTFAnimationSampler {
input: string;
output: string;
interpolation?: string;
}
interface IGLTFAnimation extends IGLTFChildRootProperty {
channels?: IGLTFAnimationChannel[];
parameters?: {
[key: string]: string;
};
samplers?: {
[key: string]: IGLTFAnimationSampler;
};
}
interface IGLTFNodeInstanceSkin {
skeletons: string[];
skin: string;
meshes: string[];
}
interface IGLTFSkins extends IGLTFChildRootProperty {
bindShapeMatrix: number[];
inverseBindMatrices: string;
jointNames: string[];
babylonSkeleton?: Skeleton;
}
interface IGLTFNode extends IGLTFChildRootProperty {
camera?: string;
children: string[];
skin?: string;
jointName?: string;
light?: string;
matrix: number[];
mesh?: string;
meshes?: string[];
rotation?: number[];
scale?: number[];
translation?: number[];
babylonNode?: Node;
}
interface IGLTFScene extends IGLTFChildRootProperty {
nodes: string[];
}
/**
* Runtime
*/
interface IGLTFRuntime {
extensions: {
[key: string]: any;
};
accessors: {
[key: string]: IGLTFAccessor;
};
buffers: {
[key: string]: IGLTFBuffer;
};
bufferViews: {
[key: string]: IGLTFBufferView;
};
meshes: {
[key: string]: IGLTFMesh;
};
lights: {
[key: string]: IGLTFLight;
};
cameras: {
[key: string]: IGLTFCamera;
};
nodes: {
[key: string]: IGLTFNode;
};
images: {
[key: string]: IGLTFImage;
};
textures: {
[key: string]: IGLTFTexture;
};
shaders: {
[key: string]: IGLTFShader;
};
programs: {
[key: string]: IGLTFProgram;
};
samplers: {
[key: string]: IGLTFSampler;
};
techniques: {
[key: string]: IGLTFTechnique;
};
materials: {
[key: string]: IGLTFMaterial;
};
animations: {
[key: string]: IGLTFAnimation;
};
skins: {
[key: string]: IGLTFSkins;
};
currentScene?: Object;
scenes: {
[key: string]: IGLTFScene;
};
extensionsUsed: string[];
extensionsRequired?: string[];
buffersCount: number;
shaderscount: number;
scene: Scene;
rootUrl: string;
loadedBufferCount: number;
loadedBufferViews: {
[name: string]: ArrayBufferView;
};
loadedShaderCount: number;
importOnlyMeshes: boolean;
importMeshesNames?: string[];
dummyNodes: Node[];
}
/**
* Bones
*/
interface INodeToRoot {
bone: Bone;
node: IGLTFNode;
id: string;
}
interface IJointNode {
node: IGLTFNode;
id: string;
}
}
declare module BABYLON.GLTF1 {
/**
* Implementation of the base glTF spec
*/
class GLTFLoaderBase {
static CreateRuntime(parsedData: any, scene: Scene, rootUrl: string): IGLTFRuntime;
static LoadBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (buffer: ArrayBufferView) => void, onError: (message: string) => void, onProgress?: () => void): void;
static LoadTextureBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (buffer: Nullable) => void, onError: (message: string) => void): void;
static CreateTextureAsync(gltfRuntime: IGLTFRuntime, id: string, buffer: Nullable, onSuccess: (texture: Texture) => void, onError: (message: string) => void): void;
static LoadShaderStringAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (shaderString: string) => void, onError: (message: string) => void): void;
static LoadMaterialAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (material: Material) => void, onError: (message: string) => void): void;
}
/**
* glTF V1 Loader
*/
class GLTFLoader implements IGLTFLoader {
static Extensions: {
[name: string]: GLTFLoaderExtension;
};
static RegisterExtension(extension: GLTFLoaderExtension): void;
dispose(): void;
importMeshAsync(meshesNames: any, scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess: (meshes: Nullable, particleSystems: Nullable, skeletons: Nullable) => void, onProgress: (event: ProgressEvent) => void, onError: (message: string) => void): boolean;
loadAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess: () => void, onProgress: (event: ProgressEvent) => void, onError: (message: string) => void): void;
private _loadShadersAsync(gltfRuntime, onload);
private _loadBuffersAsync(gltfRuntime, onLoad, onProgress?);
private _createNodes(gltfRuntime);
}
}
declare module BABYLON.GLTF1 {
/**
* Utils functions for GLTF
*/
class GLTFUtils {
/**
* Sets the given "parameter" matrix
* @param scene: the {BABYLON.Scene} object
* @param source: the source node where to pick the matrix
* @param parameter: the GLTF technique parameter
* @param uniformName: the name of the shader's uniform
* @param shaderMaterial: the shader material
*/
static SetMatrix(scene: Scene, source: Node, parameter: IGLTFTechniqueParameter, uniformName: string, shaderMaterial: ShaderMaterial | Effect): void;
/**
* Sets the given "parameter" matrix
* @param shaderMaterial: the shader material
* @param uniform: the name of the shader's uniform
* @param value: the value of the uniform
* @param type: the uniform's type (EParameterType FLOAT, VEC2, VEC3 or VEC4)
*/
static SetUniform(shaderMaterial: ShaderMaterial | Effect, uniform: string, value: any, type: number): boolean;
/**
* If the uri is a base64 string
* @param uri: the uri to test
*/
static IsBase64(uri: string): boolean;
/**
* Decode the base64 uri
* @param uri: the uri to decode
*/
static DecodeBase64(uri: string): ArrayBuffer;
/**
* Returns the wrap mode of the texture
* @param mode: the mode value
*/
static GetWrapMode(mode: number): number;
/**
* Returns the byte stride giving an accessor
* @param accessor: the GLTF accessor objet
*/
static GetByteStrideFromType(accessor: IGLTFAccessor): number;
/**
* Returns the texture filter mode giving a mode value
* @param mode: the filter mode value
*/
static GetTextureFilterMode(mode: number): ETextureFilterType;
static GetBufferFromBufferView(gltfRuntime: IGLTFRuntime, bufferView: IGLTFBufferView, byteOffset: number, byteLength: number, componentType: EComponentType): ArrayBufferView;
/**
* Returns a buffer from its accessor
* @param gltfRuntime: the GLTF runtime
* @param accessor: the GLTF accessor
*/
static GetBufferFromAccessor(gltfRuntime: IGLTFRuntime, accessor: IGLTFAccessor): any;
/**
* Decodes a buffer view into a string
* @param view: the buffer view
*/
static DecodeBufferToText(view: ArrayBufferView): string;
/**
* Returns the default material of gltf. Related to
* https://github.com/KhronosGroup/glTF/tree/master/specification/1.0#appendix-a-default-material
* @param scene: the Babylon.js scene
*/
static GetDefaultMaterial(scene: Scene): ShaderMaterial;
private static _DefaultMaterial;
}
}
declare module BABYLON.GLTF1 {
abstract class GLTFLoaderExtension {
private _name;
constructor(name: string);
readonly name: string;
/**
* Defines an override for loading the runtime
* Return true to stop further extensions from loading the runtime
*/
loadRuntimeAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess: (gltfRuntime: IGLTFRuntime) => void, onError: (message: string) => void): boolean;
/**
* Defines an onverride for creating gltf runtime
* Return true to stop further extensions from creating the runtime
*/
loadRuntimeExtensionsAsync(gltfRuntime: IGLTFRuntime, onSuccess: () => void, onError: (message: string) => void): boolean;
/**
* Defines an override for loading buffers
* Return true to stop further extensions from loading this buffer
*/
loadBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (buffer: ArrayBufferView) => void, onError: (message: string) => void, onProgress?: () => void): boolean;
/**
* Defines an override for loading texture buffers
* Return true to stop further extensions from loading this texture data
*/
loadTextureBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (buffer: ArrayBufferView) => void, onError: (message: string) => void): boolean;
/**
* Defines an override for creating textures
* Return true to stop further extensions from loading this texture
*/
createTextureAsync(gltfRuntime: IGLTFRuntime, id: string, buffer: ArrayBufferView, onSuccess: (texture: Texture) => void, onError: (message: string) => void): boolean;
/**
* Defines an override for loading shader strings
* Return true to stop further extensions from loading this shader data
*/
loadShaderStringAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (shaderString: string) => void, onError: (message: string) => void): boolean;
/**
* Defines an override for loading materials
* Return true to stop further extensions from loading this material
*/
loadMaterialAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (material: Material) => void, onError: (message: string) => void): boolean;
static LoadRuntimeAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess: (gltfRuntime: IGLTFRuntime) => void, onError: (message: string) => void): void;
static LoadRuntimeExtensionsAsync(gltfRuntime: IGLTFRuntime, onSuccess: () => void, onError: (message: string) => void): void;
static LoadBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (bufferView: ArrayBufferView) => void, onError: (message: string) => void, onProgress?: () => void): void;
static LoadTextureAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (texture: Texture) => void, onError: (message: string) => void): void;
static LoadShaderStringAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (shaderData: string) => void, onError: (message: string) => void): void;
static LoadMaterialAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (material: Material) => void, onError: (message: string) => void): void;
private static LoadTextureBufferAsync(gltfRuntime, id, onSuccess, onError);
private static CreateTextureAsync(gltfRuntime, id, buffer, onSuccess, onError);
private static ApplyExtensions(func, defaultFunc);
}
}
declare module BABYLON.GLTF1 {
class GLTFBinaryExtension extends GLTFLoaderExtension {
private _bin;
constructor();
loadRuntimeAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess: (gltfRuntime: IGLTFRuntime) => void, onError: (message: string) => void): boolean;
loadBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (buffer: ArrayBufferView) => void, onError: (message: string) => void): boolean;
loadTextureBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (buffer: ArrayBufferView) => void, onError: (message: string) => void): boolean;
loadShaderStringAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (shaderString: string) => void, onError: (message: string) => void): boolean;
}
}
declare module BABYLON.GLTF1 {
class GLTFMaterialsCommonExtension extends GLTFLoaderExtension {
constructor();
loadRuntimeExtensionsAsync(gltfRuntime: IGLTFRuntime, onSuccess: () => void, onError: (message: string) => void): boolean;
loadMaterialAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (material: Material) => void, onError: (message: string) => void): boolean;
private _loadTexture(gltfRuntime, id, material, propertyPath, onError);
}
}
declare module BABYLON.GLTF2 {
/**
* Enums
*/
enum EComponentType {
BYTE = 5120,
UNSIGNED_BYTE = 5121,
SHORT = 5122,
UNSIGNED_SHORT = 5123,
UNSIGNED_INT = 5125,
FLOAT = 5126,
}
enum EMeshPrimitiveMode {
POINTS = 0,
LINES = 1,
LINE_LOOP = 2,
LINE_STRIP = 3,
TRIANGLES = 4,
TRIANGLE_STRIP = 5,
TRIANGLE_FAN = 6,
}
enum ETextureMagFilter {
NEAREST = 9728,
LINEAR = 9729,
}
enum ETextureMinFilter {
NEAREST = 9728,
LINEAR = 9729,
NEAREST_MIPMAP_NEAREST = 9984,
LINEAR_MIPMAP_NEAREST = 9985,
NEAREST_MIPMAP_LINEAR = 9986,
LINEAR_MIPMAP_LINEAR = 9987,
}
enum ETextureWrapMode {
CLAMP_TO_EDGE = 33071,
MIRRORED_REPEAT = 33648,
REPEAT = 10497,
}
/**
* Interfaces
*/
interface IGLTFProperty {
extensions?: {
[key: string]: any;
};
extras?: any;
}
interface IGLTFChildRootProperty extends IGLTFProperty {
name?: string;
}
interface IGLTFAccessorSparseIndices extends IGLTFProperty {
bufferView: number;
byteOffset?: number;
componentType: EComponentType;
}
interface IGLTFAccessorSparseValues extends IGLTFProperty {
bufferView: number;
byteOffset?: number;
}
interface IGLTFAccessorSparse extends IGLTFProperty {
count: number;
indices: IGLTFAccessorSparseIndices;
values: IGLTFAccessorSparseValues;
}
interface IGLTFAccessor extends IGLTFChildRootProperty {
bufferView?: number;
byteOffset?: number;
componentType: EComponentType;
normalized?: boolean;
count: number;
type: string;
max: number[];
min: number[];
sparse?: IGLTFAccessorSparse;
index?: number;
}
interface IGLTFAnimationChannel extends IGLTFProperty {
sampler: number;
target: IGLTFAnimationChannelTarget;
}
interface IGLTFAnimationChannelTarget extends IGLTFProperty {
node: number;
path: string;
}
interface IGLTFAnimationSampler extends IGLTFProperty {
input: number;
interpolation?: string;
output: number;
}
interface IGLTFAnimation extends IGLTFChildRootProperty {
channels: IGLTFAnimationChannel[];
samplers: IGLTFAnimationSampler[];
index?: number;
targets?: any[];
}
interface IGLTFAsset extends IGLTFChildRootProperty {
copyright?: string;
generator?: string;
version: string;
minVersion?: string;
}
interface IGLTFBuffer extends IGLTFChildRootProperty {
uri?: string;
byteLength: number;
index?: number;
loadedData?: ArrayBufferView;
loadedObservable?: Observable;
}
interface IGLTFBufferView extends IGLTFChildRootProperty {
buffer: number;
byteOffset?: number;
byteLength: number;
byteStride?: number;
index?: number;
}
interface IGLTFCameraOrthographic extends IGLTFProperty {
xmag: number;
ymag: number;
zfar: number;
znear: number;
}
interface IGLTFCameraPerspective extends IGLTFProperty {
aspectRatio: number;
yfov: number;
zfar: number;
znear: number;
}
interface IGLTFCamera extends IGLTFChildRootProperty {
orthographic?: IGLTFCameraOrthographic;
perspective?: IGLTFCameraPerspective;
type: string;
}
interface IGLTFImage extends IGLTFChildRootProperty {
uri?: string;
mimeType?: string;
bufferView?: number;
index?: number;
}
interface IGLTFMaterialNormalTextureInfo extends IGLTFTextureInfo {
scale: number;
}
interface IGLTFMaterialOcclusionTextureInfo extends IGLTFTextureInfo {
strength: number;
}
interface IGLTFMaterialPbrMetallicRoughness {
baseColorFactor: number[];
baseColorTexture: IGLTFTextureInfo;
metallicFactor: number;
roughnessFactor: number;
metallicRoughnessTexture: IGLTFTextureInfo;
}
interface IGLTFMaterial extends IGLTFChildRootProperty {
pbrMetallicRoughness?: IGLTFMaterialPbrMetallicRoughness;
normalTexture?: IGLTFMaterialNormalTextureInfo;
occlusionTexture?: IGLTFMaterialOcclusionTextureInfo;
emissiveTexture?: IGLTFTextureInfo;
emissiveFactor?: number[];
alphaMode?: string;
alphaCutoff: number;
doubleSided?: boolean;
index?: number;
babylonMaterial?: Material;
}
interface IGLTFMeshPrimitive extends IGLTFProperty {
attributes: {
[name: string]: number;
};
indices?: number;
material?: number;
mode?: EMeshPrimitiveMode;
targets?: {
[name: string]: number;
}[];
vertexData: VertexData;
targetsVertexData: VertexData[];
}
interface IGLTFMesh extends IGLTFChildRootProperty {
primitives: IGLTFMeshPrimitive[];
weights?: number[];
index?: number;
}
interface IGLTFNode extends IGLTFChildRootProperty {
camera?: number;
children?: number[];
skin?: number;
matrix?: number[];
mesh?: number;
rotation?: number[];
scale?: number[];
translation?: number[];
weights?: number[];
index?: number;
parent?: IGLTFNode;
babylonMesh?: Mesh;
babylonBones?: {
[skin: number]: Bone;
};
babylonAnimationTargets?: Node[];
}
interface IGLTFSampler extends IGLTFChildRootProperty {
magFilter?: ETextureMagFilter;
minFilter?: ETextureMinFilter;
wrapS?: ETextureWrapMode;
wrapT?: ETextureWrapMode;
}
interface IGLTFScene extends IGLTFChildRootProperty {
nodes: number[];
index?: number;
}
interface IGLTFSkin extends IGLTFChildRootProperty {
inverseBindMatrices?: number;
skeleton?: number;
joints: number[];
index?: number;
babylonSkeleton?: Skeleton;
}
interface IGLTFTexture extends IGLTFChildRootProperty {
sampler?: number;
source: number;
index?: number;
url?: string;
dataReadyObservable?: Observable;
}
interface IGLTFTextureInfo {
index: number;
texCoord?: number;
}
interface IGLTF extends IGLTFProperty {
accessors?: IGLTFAccessor[];
animations?: IGLTFAnimation[];
asset: IGLTFAsset;
buffers?: IGLTFBuffer[];
bufferViews?: IGLTFBufferView[];
cameras?: IGLTFCamera[];
extensionsUsed?: string[];
extensionsRequired?: string[];
images?: IGLTFImage[];
materials?: IGLTFMaterial[];
meshes?: IGLTFMesh[];
nodes?: IGLTFNode[];
samplers?: IGLTFSampler[];
scene?: number;
scenes?: IGLTFScene[];
skins?: IGLTFSkin[];
textures?: IGLTFTexture[];
}
}
declare module BABYLON.GLTF2 {
class GLTFLoader implements IGLTFLoader {
_gltf: IGLTF;
_babylonScene: Scene;
private _disposed;
private _parent;
private _rootUrl;
private _defaultMaterial;
private _rootNode;
private _successCallback;
private _progressCallback;
private _errorCallback;
private _renderReady;
private _requests;
private _renderReadyObservable;
private _renderPendingCount;
private _loaderPendingCount;
private _loaderTrackers;
static Extensions: {
[name: string]: GLTFLoaderExtension;
};
static RegisterExtension(extension: GLTFLoaderExtension): void;
constructor(parent: GLTFFileLoader);
dispose(): void;
importMeshAsync(meshesNames: any, scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess: (meshes: Nullable, particleSystems: Nullable, skeletons: Nullable) => void, onProgress: (event: ProgressEvent) => void, onError: (message: string) => void): void;
loadAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess: () => void, onProgress: (event: ProgressEvent) => void, onError: (message: string) => void): void;
private _loadAsync(nodeNames, scene, data, rootUrl, onSuccess, onProgress, onError);
private _onError(message);
private _onProgress(event);
_executeWhenRenderReady(func: () => void): void;
private _onRenderReady();
private _onComplete();
private _loadData(data);
private _getMeshes();
private _getSkeletons();
private _getAnimationTargets();
private _startAnimations();
private _loadDefaultScene(nodeNames);
private _loadScene(context, scene, nodeNames);
_loadNode(context: string, node: IGLTFNode): void;
private _loadMesh(context, node, mesh);
private _loadAllVertexDataAsync(context, mesh, onSuccess);
private _loadVertexDataAsync(context, mesh, primitive, onSuccess);
private _createMorphTargets(context, node, mesh);
private _loadMorphTargets(context, node, mesh);
private _loadAllMorphTargetVertexDataAsync(context, node, mesh, onSuccess);
private _loadMorphTargetVertexDataAsync(context, vertexData, attributes, onSuccess);
private _loadTransform(node);
private _loadSkin(context, skin);
private _createBone(node, skin, parent, localMatrix, baseMatrix, index);
private _loadBones(context, skin, inverseBindMatrixData);
private _loadBone(node, skin, inverseBindMatrixData, babylonBones);
private _getNodeMatrix(node);
private _traverseNodes(context, indices, action, parentNode?);
_traverseNode(context: string, node: IGLTFNode, action: (node: IGLTFNode, parentNode: Nullable) => boolean, parentNode?: Nullable): void;
private _loadAnimations();
private _loadAnimationChannel(animation, channelContext, channel, samplerContext, sampler);
private _loadBufferAsync(context, buffer, onSuccess);
private _loadBufferViewAsync(context, bufferView, onSuccess);
private _loadAccessorAsync(context, accessor, onSuccess);
private _getNumComponentsOfType(type);
private _buildArrayBuffer(typedArray, data, byteOffset, count, numComponents, byteStride);
_addPendingData(data: any): void;
_removePendingData(data: any): void;
_addLoaderPendingData(data: any): void;
_removeLoaderPendingData(data: any): void;
_whenAction(action: () => void, onComplete: () => void): void;
private _getDefaultMaterial();
private _loadMaterialMetallicRoughnessProperties(context, material);
_loadMaterial(context: string, material: IGLTFMaterial, assign: (babylonMaterial: Material, isNew: boolean) => void): void;
_createPbrMaterial(material: IGLTFMaterial): void;
_loadMaterialBaseProperties(context: string, material: IGLTFMaterial): void;
_loadMaterialAlphaProperties(context: string, material: IGLTFMaterial, colorFactor: number[]): void;
_loadTexture(context: string, texture: IGLTFTexture, coordinatesIndex: number): Texture;
private _loadImage(context, image, onSuccess);
_loadUri(context: string, uri: string, onSuccess: (data: ArrayBufferView) => void): void;
_tryCatchOnError(handler: () => void): void;
}
}
declare module BABYLON.GLTF2 {
/**
* Utils functions for GLTF
*/
class GLTFUtils {
/**
* If the uri is a base64 string
* @param uri: the uri to test
*/
static IsBase64(uri: string): boolean;
/**
* Decode the base64 uri
* @param uri: the uri to decode
*/
static DecodeBase64(uri: string): ArrayBuffer;
static ValidateUri(uri: string): boolean;
static AssignIndices(array?: Array<{
index?: number;
}>): void;
static GetArrayItem(array: Nullable> | undefined, index: number): Nullable;
static GetTextureWrapMode(mode: ETextureWrapMode): number;
static GetTextureSamplingMode(magFilter?: ETextureMagFilter, minFilter?: ETextureMinFilter): number;
}
}
declare module BABYLON.GLTF2 {
abstract class GLTFLoaderExtension {
enabled: boolean;
readonly abstract name: string;
protected _traverseNode(loader: GLTFLoader, context: string, node: IGLTFNode, action: (node: IGLTFNode, parentNode: IGLTFNode) => boolean, parentNode: Nullable): boolean;
protected _loadNode(loader: GLTFLoader, context: string, node: IGLTFNode): boolean;
protected _loadMaterial(loader: GLTFLoader, context: string, material: IGLTFMaterial, assign: (babylonMaterial: Material, isNew: boolean) => void): boolean;
protected _loadExtension(property: IGLTFProperty, action: (extension: T, onComplete: () => void) => void): boolean;
static _Extensions: GLTFLoaderExtension[];
static TraverseNode(loader: GLTFLoader, context: string, node: IGLTFNode, action: (node: IGLTFNode, parentNode: IGLTFNode) => boolean, parentNode: Nullable): boolean;
static LoadNode(loader: GLTFLoader, context: string, node: IGLTFNode): boolean;
static LoadMaterial(loader: GLTFLoader, context: string, material: IGLTFMaterial, assign: (babylonMaterial: Material, isNew: boolean) => void): boolean;
private static _ApplyExtensions(action);
}
}
declare module BABYLON.GLTF2.Extensions {
class MSFTLOD extends GLTFLoaderExtension {
/**
* Specify the minimal delay between LODs in ms (default = 250)
*/
static MinimalLODDelay: number;
readonly name: string;
protected _traverseNode(loader: GLTFLoader, context: string, node: IGLTFNode, action: (node: IGLTFNode, parentNode: IGLTFNode) => boolean, parentNode: IGLTFNode): boolean;
protected _loadNode(loader: GLTFLoader, context: string, node: IGLTFNode): boolean;
private _loadNodeLOD(loader, context, nodes, index, onComplete);
protected _loadMaterial(loader: GLTFLoader, context: string, material: IGLTFMaterial, assign: (babylonMaterial: Material, isNew: boolean) => void): boolean;
private _loadMaterialLOD(loader, context, materials, index, assign, onComplete);
}
}
declare module BABYLON.GLTF2.Extensions {
class KHRMaterialsPbrSpecularGlossiness extends GLTFLoaderExtension {
readonly name: string;
protected _loadMaterial(loader: GLTFLoader, context: string, material: IGLTFMaterial, assign: (babylonMaterial: Material, isNew: boolean) => void): boolean;
private _loadSpecularGlossinessProperties(loader, context, material, properties);
}
}