@babylonjs/loaders 5.0.0-beta.6 → 5.0.0-beta.8-snapshot

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/package.json +20 -198
  2. package/OBJ/index.d.ts +0 -4
  3. package/OBJ/index.js +0 -5
  4. package/OBJ/index.js.map +0 -1
  5. package/OBJ/mtlFileLoader.d.ts +0 -40
  6. package/OBJ/mtlFileLoader.js +0 -222
  7. package/OBJ/mtlFileLoader.js.map +0 -1
  8. package/OBJ/objFileLoader.d.ts +0 -133
  9. package/OBJ/objFileLoader.js +0 -301
  10. package/OBJ/objFileLoader.js.map +0 -1
  11. package/OBJ/objLoadingOptions.d.ts +0 -43
  12. package/OBJ/objLoadingOptions.js +0 -2
  13. package/OBJ/objLoadingOptions.js.map +0 -1
  14. package/OBJ/solidParser.d.ts +0 -153
  15. package/OBJ/solidParser.js +0 -700
  16. package/OBJ/solidParser.js.map +0 -1
  17. package/STL/index.d.ts +0 -1
  18. package/STL/index.js +0 -2
  19. package/STL/index.js.map +0 -1
  20. package/STL/stlFileLoader.d.ts +0 -71
  21. package/STL/stlFileLoader.js +0 -240
  22. package/STL/stlFileLoader.js.map +0 -1
  23. package/glTF/1.0/glTFBinaryExtension.d.ts +0 -13
  24. package/glTF/1.0/glTFBinaryExtension.js +0 -62
  25. package/glTF/1.0/glTFBinaryExtension.js.map +0 -1
  26. package/glTF/1.0/glTFLoader.d.ts +0 -106
  27. package/glTF/1.0/glTFLoader.js +0 -1697
  28. package/glTF/1.0/glTFLoader.js.map +0 -1
  29. package/glTF/1.0/glTFLoaderInterfaces.d.ts +0 -412
  30. package/glTF/1.0/glTFLoaderInterfaces.js +0 -96
  31. package/glTF/1.0/glTFLoaderInterfaces.js.map +0 -1
  32. package/glTF/1.0/glTFLoaderUtils.d.ts +0 -62
  33. package/glTF/1.0/glTFLoaderUtils.js +0 -233
  34. package/glTF/1.0/glTFLoaderUtils.js.map +0 -1
  35. package/glTF/1.0/glTFMaterialsCommonExtension.d.ts +0 -10
  36. package/glTF/1.0/glTFMaterialsCommonExtension.js +0 -128
  37. package/glTF/1.0/glTFMaterialsCommonExtension.js.map +0 -1
  38. package/glTF/1.0/index.d.ts +0 -5
  39. package/glTF/1.0/index.js +0 -6
  40. package/glTF/1.0/index.js.map +0 -1
  41. package/glTF/2.0/Extensions/EXT_lights_image_based.d.ts +0 -36
  42. package/glTF/2.0/Extensions/EXT_lights_image_based.js +0 -111
  43. package/glTF/2.0/Extensions/EXT_lights_image_based.js.map +0 -1
  44. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.d.ts +0 -27
  45. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js +0 -80
  46. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js.map +0 -1
  47. package/glTF/2.0/Extensions/EXT_meshopt_compression.d.ts +0 -27
  48. package/glTF/2.0/Extensions/EXT_meshopt_compression.js +0 -43
  49. package/glTF/2.0/Extensions/EXT_meshopt_compression.js.map +0 -1
  50. package/glTF/2.0/Extensions/EXT_texture_webp.d.ts +0 -21
  51. package/glTF/2.0/Extensions/EXT_texture_webp.js +0 -33
  52. package/glTF/2.0/Extensions/EXT_texture_webp.js.map +0 -1
  53. package/glTF/2.0/Extensions/ExtrasAsMetadata.d.ts +0 -32
  54. package/glTF/2.0/Extensions/ExtrasAsMetadata.js +0 -56
  55. package/glTF/2.0/Extensions/ExtrasAsMetadata.js.map +0 -1
  56. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.d.ts +0 -31
  57. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.js +0 -102
  58. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.js.map +0 -1
  59. package/glTF/2.0/Extensions/KHR_lights_punctual.d.ts +0 -28
  60. package/glTF/2.0/Extensions/KHR_lights_punctual.js +0 -82
  61. package/glTF/2.0/Extensions/KHR_lights_punctual.js.map +0 -1
  62. package/glTF/2.0/Extensions/KHR_materials_clearcoat.d.ts +0 -31
  63. package/glTF/2.0/Extensions/KHR_materials_clearcoat.js +0 -87
  64. package/glTF/2.0/Extensions/KHR_materials_clearcoat.js.map +0 -1
  65. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.d.ts +0 -30
  66. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js +0 -46
  67. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js.map +0 -1
  68. package/glTF/2.0/Extensions/KHR_materials_ior.d.ts +0 -34
  69. package/glTF/2.0/Extensions/KHR_materials_ior.js +0 -55
  70. package/glTF/2.0/Extensions/KHR_materials_ior.js.map +0 -1
  71. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.d.ts +0 -30
  72. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.js +0 -73
  73. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.js.map +0 -1
  74. package/glTF/2.0/Extensions/KHR_materials_sheen.d.ts +0 -31
  75. package/glTF/2.0/Extensions/KHR_materials_sheen.js +0 -77
  76. package/glTF/2.0/Extensions/KHR_materials_sheen.js.map +0 -1
  77. package/glTF/2.0/Extensions/KHR_materials_specular.d.ts +0 -30
  78. package/glTF/2.0/Extensions/KHR_materials_specular.js +0 -67
  79. package/glTF/2.0/Extensions/KHR_materials_specular.js.map +0 -1
  80. package/glTF/2.0/Extensions/KHR_materials_translucency.d.ts +0 -31
  81. package/glTF/2.0/Extensions/KHR_materials_translucency.js +0 -77
  82. package/glTF/2.0/Extensions/KHR_materials_translucency.js.map +0 -1
  83. package/glTF/2.0/Extensions/KHR_materials_transmission.d.ts +0 -30
  84. package/glTF/2.0/Extensions/KHR_materials_transmission.js +0 -278
  85. package/glTF/2.0/Extensions/KHR_materials_transmission.js.map +0 -1
  86. package/glTF/2.0/Extensions/KHR_materials_unlit.d.ts +0 -30
  87. package/glTF/2.0/Extensions/KHR_materials_unlit.js +0 -66
  88. package/glTF/2.0/Extensions/KHR_materials_unlit.js.map +0 -1
  89. package/glTF/2.0/Extensions/KHR_materials_variants.d.ts +0 -76
  90. package/glTF/2.0/Extensions/KHR_materials_variants.js +0 -244
  91. package/glTF/2.0/Extensions/KHR_materials_variants.js.map +0 -1
  92. package/glTF/2.0/Extensions/KHR_materials_volume.d.ts +0 -31
  93. package/glTF/2.0/Extensions/KHR_materials_volume.js +0 -79
  94. package/glTF/2.0/Extensions/KHR_materials_volume.js.map +0 -1
  95. package/glTF/2.0/Extensions/KHR_mesh_quantization.d.ts +0 -19
  96. package/glTF/2.0/Extensions/KHR_mesh_quantization.js +0 -22
  97. package/glTF/2.0/Extensions/KHR_mesh_quantization.js.map +0 -1
  98. package/glTF/2.0/Extensions/KHR_texture_basisu.d.ts +0 -21
  99. package/glTF/2.0/Extensions/KHR_texture_basisu.js +0 -33
  100. package/glTF/2.0/Extensions/KHR_texture_basisu.js.map +0 -1
  101. package/glTF/2.0/Extensions/KHR_texture_transform.d.ts +0 -25
  102. package/glTF/2.0/Extensions/KHR_texture_transform.js +0 -54
  103. package/glTF/2.0/Extensions/KHR_texture_transform.js.map +0 -1
  104. package/glTF/2.0/Extensions/KHR_xmp_json_ld.d.ts +0 -29
  105. package/glTF/2.0/Extensions/KHR_xmp_json_ld.js +0 -47
  106. package/glTF/2.0/Extensions/KHR_xmp_json_ld.js.map +0 -1
  107. package/glTF/2.0/Extensions/MSFT_audio_emitter.d.ts +0 -38
  108. package/glTF/2.0/Extensions/MSFT_audio_emitter.js +0 -217
  109. package/glTF/2.0/Extensions/MSFT_audio_emitter.js.map +0 -1
  110. package/glTF/2.0/Extensions/MSFT_lod.d.ts +0 -75
  111. package/glTF/2.0/Extensions/MSFT_lod.js +0 -334
  112. package/glTF/2.0/Extensions/MSFT_lod.js.map +0 -1
  113. package/glTF/2.0/Extensions/MSFT_minecraftMesh.d.ts +0 -14
  114. package/glTF/2.0/Extensions/MSFT_minecraftMesh.js +0 -37
  115. package/glTF/2.0/Extensions/MSFT_minecraftMesh.js.map +0 -1
  116. package/glTF/2.0/Extensions/MSFT_sRGBFactors.d.ts +0 -14
  117. package/glTF/2.0/Extensions/MSFT_sRGBFactors.js +0 -37
  118. package/glTF/2.0/Extensions/MSFT_sRGBFactors.js.map +0 -1
  119. package/glTF/2.0/Extensions/index.d.ts +0 -26
  120. package/glTF/2.0/Extensions/index.js +0 -27
  121. package/glTF/2.0/Extensions/index.js.map +0 -1
  122. package/glTF/2.0/glTFLoader.d.ts +0 -355
  123. package/glTF/2.0/glTFLoader.js +0 -2184
  124. package/glTF/2.0/glTFLoader.js.map +0 -1
  125. package/glTF/2.0/glTFLoaderExtension.d.ts +0 -152
  126. package/glTF/2.0/glTFLoaderExtension.js +0 -2
  127. package/glTF/2.0/glTFLoaderExtension.js.map +0 -1
  128. package/glTF/2.0/glTFLoaderInterfaces.d.ts +0 -212
  129. package/glTF/2.0/glTFLoaderInterfaces.js +0 -2
  130. package/glTF/2.0/glTFLoaderInterfaces.js.map +0 -1
  131. package/glTF/2.0/index.d.ts +0 -4
  132. package/glTF/2.0/index.js +0 -5
  133. package/glTF/2.0/index.js.map +0 -1
  134. package/glTF/glTFFileLoader.d.ts +0 -364
  135. package/glTF/glTFFileLoader.js +0 -865
  136. package/glTF/glTFFileLoader.js.map +0 -1
  137. package/glTF/glTFValidation.d.ts +0 -29
  138. package/glTF/glTFValidation.js +0 -122
  139. package/glTF/glTFValidation.js.map +0 -1
  140. package/glTF/index.d.ts +0 -5
  141. package/glTF/index.js +0 -6
  142. package/glTF/index.js.map +0 -1
  143. package/index.d.ts +0 -3
  144. package/index.js.map +0 -1
  145. package/legacy/legacy-glTF.d.ts +0 -2
  146. package/legacy/legacy-glTF.js +0 -19
  147. package/legacy/legacy-glTF.js.map +0 -1
  148. package/legacy/legacy-glTF1.d.ts +0 -2
  149. package/legacy/legacy-glTF1.js +0 -15
  150. package/legacy/legacy-glTF1.js.map +0 -1
  151. package/legacy/legacy-glTF1FileLoader.d.ts +0 -2
  152. package/legacy/legacy-glTF1FileLoader.js +0 -3
  153. package/legacy/legacy-glTF1FileLoader.js.map +0 -1
  154. package/legacy/legacy-glTF2.d.ts +0 -2
  155. package/legacy/legacy-glTF2.js +0 -33
  156. package/legacy/legacy-glTF2.js.map +0 -1
  157. package/legacy/legacy-glTF2FileLoader.d.ts +0 -2
  158. package/legacy/legacy-glTF2FileLoader.js +0 -3
  159. package/legacy/legacy-glTF2FileLoader.js.map +0 -1
  160. package/legacy/legacy-glTFFileLoader.d.ts +0 -3
  161. package/legacy/legacy-glTFFileLoader.js +0 -4
  162. package/legacy/legacy-glTFFileLoader.js.map +0 -1
  163. package/legacy/legacy-objFileLoader.d.ts +0 -1
  164. package/legacy/legacy-objFileLoader.js +0 -13
  165. package/legacy/legacy-objFileLoader.js.map +0 -1
  166. package/legacy/legacy-stlFileLoader.d.ts +0 -1
  167. package/legacy/legacy-stlFileLoader.js +0 -13
  168. package/legacy/legacy-stlFileLoader.js.map +0 -1
  169. package/legacy/legacy.d.ts +0 -6
  170. package/legacy/legacy.js +0 -7
  171. package/legacy/legacy.js.map +0 -1
  172. package/readme.md +0 -24
@@ -1,1697 +0,0 @@
1
- import { EParameterType, ETextureFilterType, ECullingType, EBlendingFunction, EShaderType } from "./glTFLoaderInterfaces.js";
2
- import { Quaternion, Vector3, Matrix } from "@babylonjs/core/Maths/math.vector.js";
3
- import { Color3 } from '@babylonjs/core/Maths/math.color.js';
4
- import { Tools } from "@babylonjs/core/Misc/tools.js";
5
- import { Camera } from "@babylonjs/core/Cameras/camera.js";
6
- import { FreeCamera } from "@babylonjs/core/Cameras/freeCamera.js";
7
- import { Animation } from "@babylonjs/core/Animations/animation.js";
8
- import { Bone } from "@babylonjs/core/Bones/bone.js";
9
- import { Skeleton } from "@babylonjs/core/Bones/skeleton.js";
10
- import { Effect } from "@babylonjs/core/Materials/effect.js";
11
- import { Material } from "@babylonjs/core/Materials/material.js";
12
- import { MultiMaterial } from "@babylonjs/core/Materials/multiMaterial.js";
13
- import { StandardMaterial } from "@babylonjs/core/Materials/standardMaterial.js";
14
- import { ShaderMaterial } from "@babylonjs/core/Materials/shaderMaterial.js";
15
- import { Texture } from "@babylonjs/core/Materials/Textures/texture.js";
16
- import { VertexData } from "@babylonjs/core/Meshes/mesh.vertexData.js";
17
- import { VertexBuffer } from "@babylonjs/core/Buffers/buffer.js";
18
- import { Geometry } from "@babylonjs/core/Meshes/geometry.js";
19
- import { SubMesh } from "@babylonjs/core/Meshes/subMesh.js";
20
- import { AbstractMesh } from "@babylonjs/core/Meshes/abstractMesh.js";
21
- import { Mesh } from "@babylonjs/core/Meshes/mesh.js";
22
- import { HemisphericLight } from "@babylonjs/core/Lights/hemisphericLight.js";
23
- import { DirectionalLight } from "@babylonjs/core/Lights/directionalLight.js";
24
- import { PointLight } from "@babylonjs/core/Lights/pointLight.js";
25
- import { SpotLight } from "@babylonjs/core/Lights/spotLight.js";
26
- import { GLTFUtils } from "./glTFLoaderUtils.js";
27
- import { GLTFFileLoader } from "../glTFFileLoader.js";
28
- import { Constants } from '@babylonjs/core/Engines/constants.js';
29
- /**
30
- * Tokenizer. Used for shaders compatibility
31
- * Automatically map world, view, projection, worldViewProjection, attributes and so on
32
- */
33
- var ETokenType;
34
- (function (ETokenType) {
35
- ETokenType[ETokenType["IDENTIFIER"] = 1] = "IDENTIFIER";
36
- ETokenType[ETokenType["UNKNOWN"] = 2] = "UNKNOWN";
37
- ETokenType[ETokenType["END_OF_INPUT"] = 3] = "END_OF_INPUT";
38
- })(ETokenType || (ETokenType = {}));
39
- var Tokenizer = /** @class */ (function () {
40
- function Tokenizer(toParse) {
41
- this._pos = 0;
42
- this.currentToken = ETokenType.UNKNOWN;
43
- this.currentIdentifier = "";
44
- this.currentString = "";
45
- this.isLetterOrDigitPattern = /^[a-zA-Z0-9]+$/;
46
- this._toParse = toParse;
47
- this._maxPos = toParse.length;
48
- }
49
- Tokenizer.prototype.getNextToken = function () {
50
- if (this.isEnd()) {
51
- return ETokenType.END_OF_INPUT;
52
- }
53
- this.currentString = this.read();
54
- this.currentToken = ETokenType.UNKNOWN;
55
- if (this.currentString === "_" || this.isLetterOrDigitPattern.test(this.currentString)) {
56
- this.currentToken = ETokenType.IDENTIFIER;
57
- this.currentIdentifier = this.currentString;
58
- while (!this.isEnd() && (this.isLetterOrDigitPattern.test(this.currentString = this.peek()) || this.currentString === "_")) {
59
- this.currentIdentifier += this.currentString;
60
- this.forward();
61
- }
62
- }
63
- return this.currentToken;
64
- };
65
- Tokenizer.prototype.peek = function () {
66
- return this._toParse[this._pos];
67
- };
68
- Tokenizer.prototype.read = function () {
69
- return this._toParse[this._pos++];
70
- };
71
- Tokenizer.prototype.forward = function () {
72
- this._pos++;
73
- };
74
- Tokenizer.prototype.isEnd = function () {
75
- return this._pos >= this._maxPos;
76
- };
77
- return Tokenizer;
78
- }());
79
- /**
80
- * Values
81
- */
82
- var glTFTransforms = ["MODEL", "VIEW", "PROJECTION", "MODELVIEW", "MODELVIEWPROJECTION", "JOINTMATRIX"];
83
- var babylonTransforms = ["world", "view", "projection", "worldView", "worldViewProjection", "mBones"];
84
- var glTFAnimationPaths = ["translation", "rotation", "scale"];
85
- var babylonAnimationPaths = ["position", "rotationQuaternion", "scaling"];
86
- /**
87
- * Parse
88
- */
89
- var parseBuffers = function (parsedBuffers, gltfRuntime) {
90
- for (var buf in parsedBuffers) {
91
- var parsedBuffer = parsedBuffers[buf];
92
- gltfRuntime.buffers[buf] = parsedBuffer;
93
- gltfRuntime.buffersCount++;
94
- }
95
- };
96
- var parseShaders = function (parsedShaders, gltfRuntime) {
97
- for (var sha in parsedShaders) {
98
- var parsedShader = parsedShaders[sha];
99
- gltfRuntime.shaders[sha] = parsedShader;
100
- gltfRuntime.shaderscount++;
101
- }
102
- };
103
- var parseObject = function (parsedObjects, runtimeProperty, gltfRuntime) {
104
- for (var object in parsedObjects) {
105
- var parsedObject = parsedObjects[object];
106
- gltfRuntime[runtimeProperty][object] = parsedObject;
107
- }
108
- };
109
- /**
110
- * Utils
111
- */
112
- var normalizeUVs = function (buffer) {
113
- if (!buffer) {
114
- return;
115
- }
116
- for (var i = 0; i < buffer.length / 2; i++) {
117
- buffer[i * 2 + 1] = 1.0 - buffer[i * 2 + 1];
118
- }
119
- };
120
- var getAttribute = function (attributeParameter) {
121
- if (attributeParameter.semantic === "NORMAL") {
122
- return "normal";
123
- }
124
- else if (attributeParameter.semantic === "POSITION") {
125
- return "position";
126
- }
127
- else if (attributeParameter.semantic === "JOINT") {
128
- return "matricesIndices";
129
- }
130
- else if (attributeParameter.semantic === "WEIGHT") {
131
- return "matricesWeights";
132
- }
133
- else if (attributeParameter.semantic === "COLOR") {
134
- return "color";
135
- }
136
- else if (attributeParameter.semantic && attributeParameter.semantic.indexOf("TEXCOORD_") !== -1) {
137
- var channel = Number(attributeParameter.semantic.split("_")[1]);
138
- return "uv" + (channel === 0 ? "" : channel + 1);
139
- }
140
- return null;
141
- };
142
- /**
143
- * Loads and creates animations
144
- */
145
- var loadAnimations = function (gltfRuntime) {
146
- for (var anim in gltfRuntime.animations) {
147
- var animation = gltfRuntime.animations[anim];
148
- if (!animation.channels || !animation.samplers) {
149
- continue;
150
- }
151
- var lastAnimation = null;
152
- for (var i = 0; i < animation.channels.length; i++) {
153
- // Get parameters and load buffers
154
- var channel = animation.channels[i];
155
- var sampler = animation.samplers[channel.sampler];
156
- if (!sampler) {
157
- continue;
158
- }
159
- var inputData = null;
160
- var outputData = null;
161
- if (animation.parameters) {
162
- inputData = animation.parameters[sampler.input];
163
- outputData = animation.parameters[sampler.output];
164
- }
165
- else {
166
- inputData = sampler.input;
167
- outputData = sampler.output;
168
- }
169
- var bufferInput = GLTFUtils.GetBufferFromAccessor(gltfRuntime, gltfRuntime.accessors[inputData]);
170
- var bufferOutput = GLTFUtils.GetBufferFromAccessor(gltfRuntime, gltfRuntime.accessors[outputData]);
171
- var targetId = channel.target.id;
172
- var targetNode = gltfRuntime.scene.getNodeById(targetId);
173
- if (targetNode === null) {
174
- targetNode = gltfRuntime.scene.getNodeByName(targetId);
175
- }
176
- if (targetNode === null) {
177
- Tools.Warn("Creating animation named " + anim + ". But cannot find node named " + targetId + " to attach to");
178
- continue;
179
- }
180
- var isBone = targetNode instanceof Bone;
181
- // Get target path (position, rotation or scaling)
182
- var targetPath = channel.target.path;
183
- var targetPathIndex = glTFAnimationPaths.indexOf(targetPath);
184
- if (targetPathIndex !== -1) {
185
- targetPath = babylonAnimationPaths[targetPathIndex];
186
- }
187
- // Determine animation type
188
- var animationType = Animation.ANIMATIONTYPE_MATRIX;
189
- if (!isBone) {
190
- if (targetPath === "rotationQuaternion") {
191
- animationType = Animation.ANIMATIONTYPE_QUATERNION;
192
- targetNode.rotationQuaternion = new Quaternion();
193
- }
194
- else {
195
- animationType = Animation.ANIMATIONTYPE_VECTOR3;
196
- }
197
- }
198
- // Create animation and key frames
199
- var babylonAnimation = null;
200
- var keys = [];
201
- var arrayOffset = 0;
202
- var modifyKey = false;
203
- if (isBone && lastAnimation && lastAnimation.getKeys().length === bufferInput.length) {
204
- babylonAnimation = lastAnimation;
205
- modifyKey = true;
206
- }
207
- if (!modifyKey) {
208
- gltfRuntime.scene._blockEntityCollection = !!gltfRuntime.assetContainer;
209
- babylonAnimation = new Animation(anim, isBone ? "_matrix" : targetPath, 1, animationType, Animation.ANIMATIONLOOPMODE_CYCLE);
210
- gltfRuntime.scene._blockEntityCollection = false;
211
- }
212
- // For each frame
213
- for (var j = 0; j < bufferInput.length; j++) {
214
- var value = null;
215
- if (targetPath === "rotationQuaternion") { // VEC4
216
- value = Quaternion.FromArray([bufferOutput[arrayOffset], bufferOutput[arrayOffset + 1], bufferOutput[arrayOffset + 2], bufferOutput[arrayOffset + 3]]);
217
- arrayOffset += 4;
218
- }
219
- else { // Position and scaling are VEC3
220
- value = Vector3.FromArray([bufferOutput[arrayOffset], bufferOutput[arrayOffset + 1], bufferOutput[arrayOffset + 2]]);
221
- arrayOffset += 3;
222
- }
223
- if (isBone) {
224
- var bone = targetNode;
225
- var translation = Vector3.Zero();
226
- var rotationQuaternion = new Quaternion();
227
- var scaling = Vector3.Zero();
228
- // Warning on decompose
229
- var mat = bone.getBaseMatrix();
230
- if (modifyKey && lastAnimation) {
231
- mat = lastAnimation.getKeys()[j].value;
232
- }
233
- mat.decompose(scaling, rotationQuaternion, translation);
234
- if (targetPath === "position") {
235
- translation = value;
236
- }
237
- else if (targetPath === "rotationQuaternion") {
238
- rotationQuaternion = value;
239
- }
240
- else {
241
- scaling = value;
242
- }
243
- value = Matrix.Compose(scaling, rotationQuaternion, translation);
244
- }
245
- if (!modifyKey) {
246
- keys.push({
247
- frame: bufferInput[j],
248
- value: value
249
- });
250
- }
251
- else if (lastAnimation) {
252
- lastAnimation.getKeys()[j].value = value;
253
- }
254
- }
255
- // Finish
256
- if (!modifyKey && babylonAnimation) {
257
- babylonAnimation.setKeys(keys);
258
- targetNode.animations.push(babylonAnimation);
259
- }
260
- lastAnimation = babylonAnimation;
261
- gltfRuntime.scene.stopAnimation(targetNode);
262
- gltfRuntime.scene.beginAnimation(targetNode, 0, bufferInput[bufferInput.length - 1], true, 1.0);
263
- }
264
- }
265
- };
266
- /**
267
- * Returns the bones transformation matrix
268
- */
269
- var configureBoneTransformation = function (node) {
270
- var mat = null;
271
- if (node.translation || node.rotation || node.scale) {
272
- var scale = Vector3.FromArray(node.scale || [1, 1, 1]);
273
- var rotation = Quaternion.FromArray(node.rotation || [0, 0, 0, 1]);
274
- var position = Vector3.FromArray(node.translation || [0, 0, 0]);
275
- mat = Matrix.Compose(scale, rotation, position);
276
- }
277
- else {
278
- mat = Matrix.FromArray(node.matrix);
279
- }
280
- return mat;
281
- };
282
- /**
283
- * Returns the parent bone
284
- */
285
- var getParentBone = function (gltfRuntime, skins, jointName, newSkeleton) {
286
- // Try to find
287
- for (var i = 0; i < newSkeleton.bones.length; i++) {
288
- if (newSkeleton.bones[i].name === jointName) {
289
- return newSkeleton.bones[i];
290
- }
291
- }
292
- // Not found, search in gltf nodes
293
- var nodes = gltfRuntime.nodes;
294
- for (var nde in nodes) {
295
- var node = nodes[nde];
296
- if (!node.jointName) {
297
- continue;
298
- }
299
- var children = node.children;
300
- for (var i = 0; i < children.length; i++) {
301
- var child = gltfRuntime.nodes[children[i]];
302
- if (!child.jointName) {
303
- continue;
304
- }
305
- if (child.jointName === jointName) {
306
- var mat = configureBoneTransformation(node);
307
- var bone = new Bone(node.name || "", newSkeleton, getParentBone(gltfRuntime, skins, node.jointName, newSkeleton), mat);
308
- bone.id = nde;
309
- return bone;
310
- }
311
- }
312
- }
313
- return null;
314
- };
315
- /**
316
- * Returns the appropriate root node
317
- */
318
- var getNodeToRoot = function (nodesToRoot, id) {
319
- for (var i = 0; i < nodesToRoot.length; i++) {
320
- var nodeToRoot = nodesToRoot[i];
321
- for (var j = 0; j < nodeToRoot.node.children.length; j++) {
322
- var child = nodeToRoot.node.children[j];
323
- if (child === id) {
324
- return nodeToRoot.bone;
325
- }
326
- }
327
- }
328
- return null;
329
- };
330
- /**
331
- * Returns the node with the joint name
332
- */
333
- var getJointNode = function (gltfRuntime, jointName) {
334
- var nodes = gltfRuntime.nodes;
335
- var node = nodes[jointName];
336
- if (node) {
337
- return {
338
- node: node,
339
- id: jointName
340
- };
341
- }
342
- for (var nde in nodes) {
343
- node = nodes[nde];
344
- if (node.jointName === jointName) {
345
- return {
346
- node: node,
347
- id: nde
348
- };
349
- }
350
- }
351
- return null;
352
- };
353
- /**
354
- * Checks if a nodes is in joints
355
- */
356
- var nodeIsInJoints = function (skins, id) {
357
- for (var i = 0; i < skins.jointNames.length; i++) {
358
- if (skins.jointNames[i] === id) {
359
- return true;
360
- }
361
- }
362
- return false;
363
- };
364
- /**
365
- * Fills the nodes to root for bones and builds hierarchy
366
- */
367
- var getNodesToRoot = function (gltfRuntime, newSkeleton, skins, nodesToRoot) {
368
- // Creates nodes for root
369
- for (var nde in gltfRuntime.nodes) {
370
- var node = gltfRuntime.nodes[nde];
371
- var id = nde;
372
- if (!node.jointName || nodeIsInJoints(skins, node.jointName)) {
373
- continue;
374
- }
375
- // Create node to root bone
376
- var mat = configureBoneTransformation(node);
377
- var bone = new Bone(node.name || "", newSkeleton, null, mat);
378
- bone.id = id;
379
- nodesToRoot.push({ bone: bone, node: node, id: id });
380
- }
381
- // Parenting
382
- for (var i = 0; i < nodesToRoot.length; i++) {
383
- var nodeToRoot = nodesToRoot[i];
384
- var children = nodeToRoot.node.children;
385
- for (var j = 0; j < children.length; j++) {
386
- var child = null;
387
- for (var k = 0; k < nodesToRoot.length; k++) {
388
- if (nodesToRoot[k].id === children[j]) {
389
- child = nodesToRoot[k];
390
- break;
391
- }
392
- }
393
- if (child) {
394
- child.bone._parent = nodeToRoot.bone;
395
- nodeToRoot.bone.children.push(child.bone);
396
- }
397
- }
398
- }
399
- };
400
- /**
401
- * Imports a skeleton
402
- */
403
- var importSkeleton = function (gltfRuntime, skins, mesh, newSkeleton, id) {
404
- if (!newSkeleton) {
405
- newSkeleton = new Skeleton(skins.name || "", "", gltfRuntime.scene);
406
- }
407
- if (!skins.babylonSkeleton) {
408
- return newSkeleton;
409
- }
410
- // Find the root bones
411
- var nodesToRoot = [];
412
- var nodesToRootToAdd = [];
413
- getNodesToRoot(gltfRuntime, newSkeleton, skins, nodesToRoot);
414
- newSkeleton.bones = [];
415
- // Joints
416
- for (var i = 0; i < skins.jointNames.length; i++) {
417
- var jointNode = getJointNode(gltfRuntime, skins.jointNames[i]);
418
- if (!jointNode) {
419
- continue;
420
- }
421
- var node = jointNode.node;
422
- if (!node) {
423
- Tools.Warn("Joint named " + skins.jointNames[i] + " does not exist");
424
- continue;
425
- }
426
- var id = jointNode.id;
427
- // Optimize, if the bone already exists...
428
- var existingBone = gltfRuntime.scene.getBoneById(id);
429
- if (existingBone) {
430
- newSkeleton.bones.push(existingBone);
431
- continue;
432
- }
433
- // Search for parent bone
434
- var foundBone = false;
435
- var parentBone = null;
436
- for (var j = 0; j < i; j++) {
437
- var jointNode_1 = getJointNode(gltfRuntime, skins.jointNames[j]);
438
- if (!jointNode_1) {
439
- continue;
440
- }
441
- var joint = jointNode_1.node;
442
- if (!joint) {
443
- Tools.Warn("Joint named " + skins.jointNames[j] + " does not exist when looking for parent");
444
- continue;
445
- }
446
- var children = joint.children;
447
- if (!children) {
448
- continue;
449
- }
450
- foundBone = false;
451
- for (var k = 0; k < children.length; k++) {
452
- if (children[k] === id) {
453
- parentBone = getParentBone(gltfRuntime, skins, skins.jointNames[j], newSkeleton);
454
- foundBone = true;
455
- break;
456
- }
457
- }
458
- if (foundBone) {
459
- break;
460
- }
461
- }
462
- // Create bone
463
- var mat = configureBoneTransformation(node);
464
- if (!parentBone && nodesToRoot.length > 0) {
465
- parentBone = getNodeToRoot(nodesToRoot, id);
466
- if (parentBone) {
467
- if (nodesToRootToAdd.indexOf(parentBone) === -1) {
468
- nodesToRootToAdd.push(parentBone);
469
- }
470
- }
471
- }
472
- var bone = new Bone(node.jointName || "", newSkeleton, parentBone, mat);
473
- bone.id = id;
474
- }
475
- // Polish
476
- var bones = newSkeleton.bones;
477
- newSkeleton.bones = [];
478
- for (var i = 0; i < skins.jointNames.length; i++) {
479
- var jointNode = getJointNode(gltfRuntime, skins.jointNames[i]);
480
- if (!jointNode) {
481
- continue;
482
- }
483
- for (var j = 0; j < bones.length; j++) {
484
- if (bones[j].id === jointNode.id) {
485
- newSkeleton.bones.push(bones[j]);
486
- break;
487
- }
488
- }
489
- }
490
- newSkeleton.prepare();
491
- // Finish
492
- for (var i = 0; i < nodesToRootToAdd.length; i++) {
493
- newSkeleton.bones.push(nodesToRootToAdd[i]);
494
- }
495
- return newSkeleton;
496
- };
497
- /**
498
- * Imports a mesh and its geometries
499
- */
500
- var importMesh = function (gltfRuntime, node, meshes, id, newMesh) {
501
- if (!newMesh) {
502
- gltfRuntime.scene._blockEntityCollection = !!gltfRuntime.assetContainer;
503
- newMesh = new Mesh(node.name || "", gltfRuntime.scene);
504
- newMesh._parentContainer = gltfRuntime.assetContainer;
505
- gltfRuntime.scene._blockEntityCollection = false;
506
- newMesh.id = id;
507
- }
508
- if (!node.babylonNode) {
509
- return newMesh;
510
- }
511
- var subMaterials = [];
512
- var vertexData = null;
513
- var verticesStarts = new Array();
514
- var verticesCounts = new Array();
515
- var indexStarts = new Array();
516
- var indexCounts = new Array();
517
- for (var meshIndex = 0; meshIndex < meshes.length; meshIndex++) {
518
- var meshId = meshes[meshIndex];
519
- var mesh = gltfRuntime.meshes[meshId];
520
- if (!mesh) {
521
- continue;
522
- }
523
- // Positions, normals and UVs
524
- for (var i = 0; i < mesh.primitives.length; i++) {
525
- // Temporary vertex data
526
- var tempVertexData = new VertexData();
527
- var primitive = mesh.primitives[i];
528
- if (primitive.mode !== 4) {
529
- // continue;
530
- }
531
- var attributes = primitive.attributes;
532
- var accessor = null;
533
- var buffer = null;
534
- // Set positions, normal and uvs
535
- for (var semantic in attributes) {
536
- // Link accessor and buffer view
537
- accessor = gltfRuntime.accessors[attributes[semantic]];
538
- buffer = GLTFUtils.GetBufferFromAccessor(gltfRuntime, accessor);
539
- if (semantic === "NORMAL") {
540
- tempVertexData.normals = new Float32Array(buffer.length);
541
- tempVertexData.normals.set(buffer);
542
- }
543
- else if (semantic === "POSITION") {
544
- if (GLTFFileLoader.HomogeneousCoordinates) {
545
- tempVertexData.positions = new Float32Array(buffer.length - buffer.length / 4);
546
- for (var j = 0; j < buffer.length; j += 4) {
547
- tempVertexData.positions[j] = buffer[j];
548
- tempVertexData.positions[j + 1] = buffer[j + 1];
549
- tempVertexData.positions[j + 2] = buffer[j + 2];
550
- }
551
- }
552
- else {
553
- tempVertexData.positions = new Float32Array(buffer.length);
554
- tempVertexData.positions.set(buffer);
555
- }
556
- verticesCounts.push(tempVertexData.positions.length);
557
- }
558
- else if (semantic.indexOf("TEXCOORD_") !== -1) {
559
- var channel = Number(semantic.split("_")[1]);
560
- var uvKind = VertexBuffer.UVKind + (channel === 0 ? "" : (channel + 1));
561
- var uvs = new Float32Array(buffer.length);
562
- uvs.set(buffer);
563
- normalizeUVs(uvs);
564
- tempVertexData.set(uvs, uvKind);
565
- }
566
- else if (semantic === "JOINT") {
567
- tempVertexData.matricesIndices = new Float32Array(buffer.length);
568
- tempVertexData.matricesIndices.set(buffer);
569
- }
570
- else if (semantic === "WEIGHT") {
571
- tempVertexData.matricesWeights = new Float32Array(buffer.length);
572
- tempVertexData.matricesWeights.set(buffer);
573
- }
574
- else if (semantic === "COLOR") {
575
- tempVertexData.colors = new Float32Array(buffer.length);
576
- tempVertexData.colors.set(buffer);
577
- }
578
- }
579
- // Indices
580
- accessor = gltfRuntime.accessors[primitive.indices];
581
- if (accessor) {
582
- buffer = GLTFUtils.GetBufferFromAccessor(gltfRuntime, accessor);
583
- tempVertexData.indices = new Int32Array(buffer.length);
584
- tempVertexData.indices.set(buffer);
585
- indexCounts.push(tempVertexData.indices.length);
586
- }
587
- else {
588
- // Set indices on the fly
589
- var indices = [];
590
- for (var j = 0; j < tempVertexData.positions.length / 3; j++) {
591
- indices.push(j);
592
- }
593
- tempVertexData.indices = new Int32Array(indices);
594
- indexCounts.push(tempVertexData.indices.length);
595
- }
596
- if (!vertexData) {
597
- vertexData = tempVertexData;
598
- }
599
- else {
600
- vertexData.merge(tempVertexData);
601
- }
602
- // Sub material
603
- var material_1 = gltfRuntime.scene.getMaterialById(primitive.material);
604
- subMaterials.push(material_1 === null ? GLTFUtils.GetDefaultMaterial(gltfRuntime.scene) : material_1);
605
- // Update vertices start and index start
606
- verticesStarts.push(verticesStarts.length === 0 ? 0 : verticesStarts[verticesStarts.length - 1] + verticesCounts[verticesCounts.length - 2]);
607
- indexStarts.push(indexStarts.length === 0 ? 0 : indexStarts[indexStarts.length - 1] + indexCounts[indexCounts.length - 2]);
608
- }
609
- }
610
- var material;
611
- gltfRuntime.scene._blockEntityCollection = !!gltfRuntime.assetContainer;
612
- if (subMaterials.length > 1) {
613
- material = new MultiMaterial("multimat" + id, gltfRuntime.scene);
614
- material.subMaterials = subMaterials;
615
- }
616
- else {
617
- material = new StandardMaterial("multimat" + id, gltfRuntime.scene);
618
- }
619
- if (subMaterials.length === 1) {
620
- material = subMaterials[0];
621
- }
622
- material._parentContainer = gltfRuntime.assetContainer;
623
- if (!newMesh.material) {
624
- newMesh.material = material;
625
- }
626
- // Apply geometry
627
- new Geometry(id, gltfRuntime.scene, vertexData, false, newMesh);
628
- newMesh.computeWorldMatrix(true);
629
- gltfRuntime.scene._blockEntityCollection = false;
630
- // Apply submeshes
631
- newMesh.subMeshes = [];
632
- var index = 0;
633
- for (var meshIndex = 0; meshIndex < meshes.length; meshIndex++) {
634
- var meshId = meshes[meshIndex];
635
- var mesh = gltfRuntime.meshes[meshId];
636
- if (!mesh) {
637
- continue;
638
- }
639
- for (var i = 0; i < mesh.primitives.length; i++) {
640
- if (mesh.primitives[i].mode !== 4) {
641
- //continue;
642
- }
643
- SubMesh.AddToMesh(index, verticesStarts[index], verticesCounts[index], indexStarts[index], indexCounts[index], newMesh, newMesh, true);
644
- index++;
645
- }
646
- }
647
- // Finish
648
- return newMesh;
649
- };
650
- /**
651
- * Configure node transformation from position, rotation and scaling
652
- */
653
- var configureNode = function (newNode, position, rotation, scaling) {
654
- if (newNode.position) {
655
- newNode.position = position;
656
- }
657
- if (newNode.rotationQuaternion || newNode.rotation) {
658
- newNode.rotationQuaternion = rotation;
659
- }
660
- if (newNode.scaling) {
661
- newNode.scaling = scaling;
662
- }
663
- };
664
- /**
665
- * Configures node from transformation matrix
666
- */
667
- var configureNodeFromMatrix = function (newNode, node, parent) {
668
- if (node.matrix) {
669
- var position = new Vector3(0, 0, 0);
670
- var rotation = new Quaternion();
671
- var scaling = new Vector3(0, 0, 0);
672
- var mat = Matrix.FromArray(node.matrix);
673
- mat.decompose(scaling, rotation, position);
674
- configureNode(newNode, position, rotation, scaling);
675
- }
676
- else if (node.translation && node.rotation && node.scale) {
677
- configureNode(newNode, Vector3.FromArray(node.translation), Quaternion.FromArray(node.rotation), Vector3.FromArray(node.scale));
678
- }
679
- newNode.computeWorldMatrix(true);
680
- };
681
- /**
682
- * Imports a node
683
- */
684
- var importNode = function (gltfRuntime, node, id, parent) {
685
- var lastNode = null;
686
- if (gltfRuntime.importOnlyMeshes && (node.skin || node.meshes)) {
687
- if (gltfRuntime.importMeshesNames && gltfRuntime.importMeshesNames.length > 0 && gltfRuntime.importMeshesNames.indexOf(node.name || "") === -1) {
688
- return null;
689
- }
690
- }
691
- // Meshes
692
- if (node.skin) {
693
- if (node.meshes) {
694
- var skin = gltfRuntime.skins[node.skin];
695
- var newMesh = importMesh(gltfRuntime, node, node.meshes, id, node.babylonNode);
696
- newMesh.skeleton = gltfRuntime.scene.getLastSkeletonById(node.skin);
697
- if (newMesh.skeleton === null) {
698
- newMesh.skeleton = importSkeleton(gltfRuntime, skin, newMesh, skin.babylonSkeleton, node.skin);
699
- if (!skin.babylonSkeleton) {
700
- skin.babylonSkeleton = newMesh.skeleton;
701
- }
702
- }
703
- lastNode = newMesh;
704
- }
705
- }
706
- else if (node.meshes) {
707
- /**
708
- * Improve meshes property
709
- */
710
- var newMesh = importMesh(gltfRuntime, node, node.mesh ? [node.mesh] : node.meshes, id, node.babylonNode);
711
- lastNode = newMesh;
712
- }
713
- // Lights
714
- else if (node.light && !node.babylonNode && !gltfRuntime.importOnlyMeshes) {
715
- var light = gltfRuntime.lights[node.light];
716
- if (light) {
717
- if (light.type === "ambient") {
718
- var ambienLight = light[light.type];
719
- var hemiLight = new HemisphericLight(node.light, Vector3.Zero(), gltfRuntime.scene);
720
- hemiLight.name = node.name || "";
721
- if (ambienLight.color) {
722
- hemiLight.diffuse = Color3.FromArray(ambienLight.color);
723
- }
724
- lastNode = hemiLight;
725
- }
726
- else if (light.type === "directional") {
727
- var directionalLight = light[light.type];
728
- var dirLight = new DirectionalLight(node.light, Vector3.Zero(), gltfRuntime.scene);
729
- dirLight.name = node.name || "";
730
- if (directionalLight.color) {
731
- dirLight.diffuse = Color3.FromArray(directionalLight.color);
732
- }
733
- lastNode = dirLight;
734
- }
735
- else if (light.type === "point") {
736
- var pointLight = light[light.type];
737
- var ptLight = new PointLight(node.light, Vector3.Zero(), gltfRuntime.scene);
738
- ptLight.name = node.name || "";
739
- if (pointLight.color) {
740
- ptLight.diffuse = Color3.FromArray(pointLight.color);
741
- }
742
- lastNode = ptLight;
743
- }
744
- else if (light.type === "spot") {
745
- var spotLight = light[light.type];
746
- var spLight = new SpotLight(node.light, Vector3.Zero(), Vector3.Zero(), 0, 0, gltfRuntime.scene);
747
- spLight.name = node.name || "";
748
- if (spotLight.color) {
749
- spLight.diffuse = Color3.FromArray(spotLight.color);
750
- }
751
- if (spotLight.fallOfAngle) {
752
- spLight.angle = spotLight.fallOfAngle;
753
- }
754
- if (spotLight.fallOffExponent) {
755
- spLight.exponent = spotLight.fallOffExponent;
756
- }
757
- lastNode = spLight;
758
- }
759
- }
760
- }
761
- // Cameras
762
- else if (node.camera && !node.babylonNode && !gltfRuntime.importOnlyMeshes) {
763
- var camera = gltfRuntime.cameras[node.camera];
764
- if (camera) {
765
- gltfRuntime.scene._blockEntityCollection = !!gltfRuntime.assetContainer;
766
- if (camera.type === "orthographic") {
767
- var orthoCamera = new FreeCamera(node.camera, Vector3.Zero(), gltfRuntime.scene, false);
768
- orthoCamera.name = node.name || "";
769
- orthoCamera.mode = Camera.ORTHOGRAPHIC_CAMERA;
770
- orthoCamera.attachControl();
771
- lastNode = orthoCamera;
772
- orthoCamera._parentContainer = gltfRuntime.assetContainer;
773
- }
774
- else if (camera.type === "perspective") {
775
- var perspectiveCamera = camera[camera.type];
776
- var persCamera = new FreeCamera(node.camera, Vector3.Zero(), gltfRuntime.scene, false);
777
- persCamera.name = node.name || "";
778
- persCamera.attachControl();
779
- if (!perspectiveCamera.aspectRatio) {
780
- perspectiveCamera.aspectRatio = gltfRuntime.scene.getEngine().getRenderWidth() / gltfRuntime.scene.getEngine().getRenderHeight();
781
- }
782
- if (perspectiveCamera.znear && perspectiveCamera.zfar) {
783
- persCamera.maxZ = perspectiveCamera.zfar;
784
- persCamera.minZ = perspectiveCamera.znear;
785
- }
786
- lastNode = persCamera;
787
- persCamera._parentContainer = gltfRuntime.assetContainer;
788
- }
789
- gltfRuntime.scene._blockEntityCollection = false;
790
- }
791
- }
792
- // Empty node
793
- if (!node.jointName) {
794
- if (node.babylonNode) {
795
- return node.babylonNode;
796
- }
797
- else if (lastNode === null) {
798
- gltfRuntime.scene._blockEntityCollection = !!gltfRuntime.assetContainer;
799
- var dummy = new Mesh(node.name || "", gltfRuntime.scene);
800
- dummy._parentContainer = gltfRuntime.assetContainer;
801
- gltfRuntime.scene._blockEntityCollection = false;
802
- node.babylonNode = dummy;
803
- lastNode = dummy;
804
- }
805
- }
806
- if (lastNode !== null) {
807
- if (node.matrix && lastNode instanceof Mesh) {
808
- configureNodeFromMatrix(lastNode, node, parent);
809
- }
810
- else {
811
- var translation = node.translation || [0, 0, 0];
812
- var rotation = node.rotation || [0, 0, 0, 1];
813
- var scale = node.scale || [1, 1, 1];
814
- configureNode(lastNode, Vector3.FromArray(translation), Quaternion.FromArray(rotation), Vector3.FromArray(scale));
815
- }
816
- lastNode.updateCache(true);
817
- node.babylonNode = lastNode;
818
- }
819
- return lastNode;
820
- };
821
- /**
822
- * Traverses nodes and creates them
823
- */
824
- var traverseNodes = function (gltfRuntime, id, parent, meshIncluded) {
825
- if (meshIncluded === void 0) { meshIncluded = false; }
826
- var node = gltfRuntime.nodes[id];
827
- var newNode = null;
828
- if (gltfRuntime.importOnlyMeshes && !meshIncluded && gltfRuntime.importMeshesNames) {
829
- if (gltfRuntime.importMeshesNames.indexOf(node.name || "") !== -1 || gltfRuntime.importMeshesNames.length === 0) {
830
- meshIncluded = true;
831
- }
832
- else {
833
- meshIncluded = false;
834
- }
835
- }
836
- else {
837
- meshIncluded = true;
838
- }
839
- if (!node.jointName && meshIncluded) {
840
- newNode = importNode(gltfRuntime, node, id, parent);
841
- if (newNode !== null) {
842
- newNode.id = id;
843
- newNode.parent = parent;
844
- }
845
- }
846
- if (node.children) {
847
- for (var i = 0; i < node.children.length; i++) {
848
- traverseNodes(gltfRuntime, node.children[i], newNode, meshIncluded);
849
- }
850
- }
851
- };
852
- /**
853
- * do stuff after buffers, shaders are loaded (e.g. hook up materials, load animations, etc.)
854
- */
855
- var postLoad = function (gltfRuntime) {
856
- // Nodes
857
- var currentScene = gltfRuntime.currentScene;
858
- if (currentScene) {
859
- for (var i = 0; i < currentScene.nodes.length; i++) {
860
- traverseNodes(gltfRuntime, currentScene.nodes[i], null);
861
- }
862
- }
863
- else {
864
- for (var thing in gltfRuntime.scenes) {
865
- currentScene = gltfRuntime.scenes[thing];
866
- for (var i = 0; i < currentScene.nodes.length; i++) {
867
- traverseNodes(gltfRuntime, currentScene.nodes[i], null);
868
- }
869
- }
870
- }
871
- // Set animations
872
- loadAnimations(gltfRuntime);
873
- for (var i = 0; i < gltfRuntime.scene.skeletons.length; i++) {
874
- var skeleton = gltfRuntime.scene.skeletons[i];
875
- gltfRuntime.scene.beginAnimation(skeleton, 0, Number.MAX_VALUE, true, 1.0);
876
- }
877
- };
878
- /**
879
- * onBind shaderrs callback to set uniforms and matrices
880
- */
881
- var onBindShaderMaterial = function (mesh, gltfRuntime, unTreatedUniforms, shaderMaterial, technique, material, onSuccess) {
882
- var materialValues = material.values || technique.parameters;
883
- for (var unif in unTreatedUniforms) {
884
- var uniform = unTreatedUniforms[unif];
885
- var type = uniform.type;
886
- if (type === EParameterType.FLOAT_MAT2 || type === EParameterType.FLOAT_MAT3 || type === EParameterType.FLOAT_MAT4) {
887
- if (uniform.semantic && !uniform.source && !uniform.node) {
888
- GLTFUtils.SetMatrix(gltfRuntime.scene, mesh, uniform, unif, shaderMaterial.getEffect());
889
- }
890
- else if (uniform.semantic && (uniform.source || uniform.node)) {
891
- var source = gltfRuntime.scene.getNodeByName(uniform.source || uniform.node || "");
892
- if (source === null) {
893
- source = gltfRuntime.scene.getNodeById(uniform.source || uniform.node || "");
894
- }
895
- if (source === null) {
896
- continue;
897
- }
898
- GLTFUtils.SetMatrix(gltfRuntime.scene, source, uniform, unif, shaderMaterial.getEffect());
899
- }
900
- }
901
- else {
902
- var value = materialValues[technique.uniforms[unif]];
903
- if (!value) {
904
- continue;
905
- }
906
- if (type === EParameterType.SAMPLER_2D) {
907
- var texture = gltfRuntime.textures[material.values ? value : uniform.value].babylonTexture;
908
- if (texture === null || texture === undefined) {
909
- continue;
910
- }
911
- shaderMaterial.getEffect().setTexture(unif, texture);
912
- }
913
- else {
914
- GLTFUtils.SetUniform((shaderMaterial.getEffect()), unif, value, type);
915
- }
916
- }
917
- }
918
- onSuccess(shaderMaterial);
919
- };
920
- /**
921
- * Prepare uniforms to send the only one time
922
- * Loads the appropriate textures
923
- */
924
- var prepareShaderMaterialUniforms = function (gltfRuntime, shaderMaterial, technique, material, unTreatedUniforms) {
925
- var materialValues = material.values || technique.parameters;
926
- var techniqueUniforms = technique.uniforms;
927
- /**
928
- * Prepare values here (not matrices)
929
- */
930
- for (var unif in unTreatedUniforms) {
931
- var uniform = unTreatedUniforms[unif];
932
- var type = uniform.type;
933
- var value = materialValues[techniqueUniforms[unif]];
934
- if (value === undefined) {
935
- // In case the value is the same for all materials
936
- value = uniform.value;
937
- }
938
- if (!value) {
939
- continue;
940
- }
941
- var onLoadTexture = function (uniformName) {
942
- return function (texture) {
943
- if (uniform.value && uniformName) {
944
- // Static uniform
945
- shaderMaterial.setTexture(uniformName, texture);
946
- delete unTreatedUniforms[uniformName];
947
- }
948
- };
949
- };
950
- // Texture (sampler2D)
951
- if (type === EParameterType.SAMPLER_2D) {
952
- GLTFLoaderExtension.LoadTextureAsync(gltfRuntime, material.values ? value : uniform.value, onLoadTexture(unif), function () { return onLoadTexture(null); });
953
- }
954
- // Others
955
- else {
956
- if (uniform.value && GLTFUtils.SetUniform(shaderMaterial, unif, material.values ? value : uniform.value, type)) {
957
- // Static uniform
958
- delete unTreatedUniforms[unif];
959
- }
960
- }
961
- }
962
- };
963
- /**
964
- * Shader compilation failed
965
- */
966
- var onShaderCompileError = function (program, shaderMaterial, onError) {
967
- return function (effect, error) {
968
- shaderMaterial.dispose(true);
969
- onError("Cannot compile program named " + program.name + ". Error: " + error + ". Default material will be applied");
970
- };
971
- };
972
- /**
973
- * Shader compilation success
974
- */
975
- var onShaderCompileSuccess = function (gltfRuntime, shaderMaterial, technique, material, unTreatedUniforms, onSuccess) {
976
- return function (_) {
977
- prepareShaderMaterialUniforms(gltfRuntime, shaderMaterial, technique, material, unTreatedUniforms);
978
- shaderMaterial.onBind = function (mesh) {
979
- onBindShaderMaterial(mesh, gltfRuntime, unTreatedUniforms, shaderMaterial, technique, material, onSuccess);
980
- };
981
- };
982
- };
983
- /**
984
- * Returns the appropriate uniform if already handled by babylon
985
- */
986
- var parseShaderUniforms = function (tokenizer, technique, unTreatedUniforms) {
987
- for (var unif in technique.uniforms) {
988
- var uniform = technique.uniforms[unif];
989
- var uniformParameter = technique.parameters[uniform];
990
- if (tokenizer.currentIdentifier === unif) {
991
- if (uniformParameter.semantic && !uniformParameter.source && !uniformParameter.node) {
992
- var transformIndex = glTFTransforms.indexOf(uniformParameter.semantic);
993
- if (transformIndex !== -1) {
994
- delete unTreatedUniforms[unif];
995
- return babylonTransforms[transformIndex];
996
- }
997
- }
998
- }
999
- }
1000
- return tokenizer.currentIdentifier;
1001
- };
1002
- /**
1003
- * All shaders loaded. Create materials one by one
1004
- */
1005
- var importMaterials = function (gltfRuntime) {
1006
- // Create materials
1007
- for (var mat in gltfRuntime.materials) {
1008
- GLTFLoaderExtension.LoadMaterialAsync(gltfRuntime, mat, function (material) { }, function () { });
1009
- }
1010
- };
1011
- /**
1012
- * Implementation of the base glTF spec
1013
- * @hidden
1014
- */
1015
- var GLTFLoaderBase = /** @class */ (function () {
1016
- function GLTFLoaderBase() {
1017
- }
1018
- GLTFLoaderBase.CreateRuntime = function (parsedData, scene, rootUrl) {
1019
- var gltfRuntime = {
1020
- extensions: {},
1021
- accessors: {},
1022
- buffers: {},
1023
- bufferViews: {},
1024
- meshes: {},
1025
- lights: {},
1026
- cameras: {},
1027
- nodes: {},
1028
- images: {},
1029
- textures: {},
1030
- shaders: {},
1031
- programs: {},
1032
- samplers: {},
1033
- techniques: {},
1034
- materials: {},
1035
- animations: {},
1036
- skins: {},
1037
- extensionsUsed: [],
1038
- scenes: {},
1039
- buffersCount: 0,
1040
- shaderscount: 0,
1041
- scene: scene,
1042
- rootUrl: rootUrl,
1043
- loadedBufferCount: 0,
1044
- loadedBufferViews: {},
1045
- loadedShaderCount: 0,
1046
- importOnlyMeshes: false,
1047
- dummyNodes: [],
1048
- assetContainer: null
1049
- };
1050
- // Parse
1051
- if (parsedData.extensions) {
1052
- parseObject(parsedData.extensions, "extensions", gltfRuntime);
1053
- }
1054
- if (parsedData.extensionsUsed) {
1055
- parseObject(parsedData.extensionsUsed, "extensionsUsed", gltfRuntime);
1056
- }
1057
- if (parsedData.buffers) {
1058
- parseBuffers(parsedData.buffers, gltfRuntime);
1059
- }
1060
- if (parsedData.bufferViews) {
1061
- parseObject(parsedData.bufferViews, "bufferViews", gltfRuntime);
1062
- }
1063
- if (parsedData.accessors) {
1064
- parseObject(parsedData.accessors, "accessors", gltfRuntime);
1065
- }
1066
- if (parsedData.meshes) {
1067
- parseObject(parsedData.meshes, "meshes", gltfRuntime);
1068
- }
1069
- if (parsedData.lights) {
1070
- parseObject(parsedData.lights, "lights", gltfRuntime);
1071
- }
1072
- if (parsedData.cameras) {
1073
- parseObject(parsedData.cameras, "cameras", gltfRuntime);
1074
- }
1075
- if (parsedData.nodes) {
1076
- parseObject(parsedData.nodes, "nodes", gltfRuntime);
1077
- }
1078
- if (parsedData.images) {
1079
- parseObject(parsedData.images, "images", gltfRuntime);
1080
- }
1081
- if (parsedData.textures) {
1082
- parseObject(parsedData.textures, "textures", gltfRuntime);
1083
- }
1084
- if (parsedData.shaders) {
1085
- parseShaders(parsedData.shaders, gltfRuntime);
1086
- }
1087
- if (parsedData.programs) {
1088
- parseObject(parsedData.programs, "programs", gltfRuntime);
1089
- }
1090
- if (parsedData.samplers) {
1091
- parseObject(parsedData.samplers, "samplers", gltfRuntime);
1092
- }
1093
- if (parsedData.techniques) {
1094
- parseObject(parsedData.techniques, "techniques", gltfRuntime);
1095
- }
1096
- if (parsedData.materials) {
1097
- parseObject(parsedData.materials, "materials", gltfRuntime);
1098
- }
1099
- if (parsedData.animations) {
1100
- parseObject(parsedData.animations, "animations", gltfRuntime);
1101
- }
1102
- if (parsedData.skins) {
1103
- parseObject(parsedData.skins, "skins", gltfRuntime);
1104
- }
1105
- if (parsedData.scenes) {
1106
- gltfRuntime.scenes = parsedData.scenes;
1107
- }
1108
- if (parsedData.scene && parsedData.scenes) {
1109
- gltfRuntime.currentScene = parsedData.scenes[parsedData.scene];
1110
- }
1111
- return gltfRuntime;
1112
- };
1113
- GLTFLoaderBase.LoadBufferAsync = function (gltfRuntime, id, onSuccess, onError, onProgress) {
1114
- var buffer = gltfRuntime.buffers[id];
1115
- if (Tools.IsBase64(buffer.uri)) {
1116
- setTimeout(function () { return onSuccess(new Uint8Array(Tools.DecodeBase64(buffer.uri))); });
1117
- }
1118
- else {
1119
- Tools.LoadFile(gltfRuntime.rootUrl + buffer.uri, function (data) { return onSuccess(new Uint8Array(data)); }, onProgress, undefined, true, function (request) {
1120
- if (request) {
1121
- onError(request.status + " " + request.statusText);
1122
- }
1123
- });
1124
- }
1125
- };
1126
- GLTFLoaderBase.LoadTextureBufferAsync = function (gltfRuntime, id, onSuccess, onError) {
1127
- var texture = gltfRuntime.textures[id];
1128
- if (!texture || !texture.source) {
1129
- onError("");
1130
- return;
1131
- }
1132
- if (texture.babylonTexture) {
1133
- onSuccess(null);
1134
- return;
1135
- }
1136
- var source = gltfRuntime.images[texture.source];
1137
- if (Tools.IsBase64(source.uri)) {
1138
- setTimeout(function () { return onSuccess(new Uint8Array(Tools.DecodeBase64(source.uri))); });
1139
- }
1140
- else {
1141
- Tools.LoadFile(gltfRuntime.rootUrl + source.uri, function (data) { return onSuccess(new Uint8Array(data)); }, undefined, undefined, true, function (request) {
1142
- if (request) {
1143
- onError(request.status + " " + request.statusText);
1144
- }
1145
- });
1146
- }
1147
- };
1148
- GLTFLoaderBase.CreateTextureAsync = function (gltfRuntime, id, buffer, onSuccess, onError) {
1149
- var texture = gltfRuntime.textures[id];
1150
- if (texture.babylonTexture) {
1151
- onSuccess(texture.babylonTexture);
1152
- return;
1153
- }
1154
- var sampler = gltfRuntime.samplers[texture.sampler];
1155
- var createMipMaps = (sampler.minFilter === ETextureFilterType.NEAREST_MIPMAP_NEAREST) ||
1156
- (sampler.minFilter === ETextureFilterType.NEAREST_MIPMAP_LINEAR) ||
1157
- (sampler.minFilter === ETextureFilterType.LINEAR_MIPMAP_NEAREST) ||
1158
- (sampler.minFilter === ETextureFilterType.LINEAR_MIPMAP_LINEAR);
1159
- var samplingMode = Texture.BILINEAR_SAMPLINGMODE;
1160
- var blob = buffer == null ? new Blob() : new Blob([buffer]);
1161
- var blobURL = URL.createObjectURL(blob);
1162
- var revokeBlobURL = function () { return URL.revokeObjectURL(blobURL); };
1163
- var newTexture = new Texture(blobURL, gltfRuntime.scene, !createMipMaps, true, samplingMode, revokeBlobURL, revokeBlobURL);
1164
- if (sampler.wrapS !== undefined) {
1165
- newTexture.wrapU = GLTFUtils.GetWrapMode(sampler.wrapS);
1166
- }
1167
- if (sampler.wrapT !== undefined) {
1168
- newTexture.wrapV = GLTFUtils.GetWrapMode(sampler.wrapT);
1169
- }
1170
- newTexture.name = id;
1171
- texture.babylonTexture = newTexture;
1172
- onSuccess(newTexture);
1173
- };
1174
- GLTFLoaderBase.LoadShaderStringAsync = function (gltfRuntime, id, onSuccess, onError) {
1175
- var shader = gltfRuntime.shaders[id];
1176
- if (Tools.IsBase64(shader.uri)) {
1177
- var shaderString = atob(shader.uri.split(",")[1]);
1178
- if (onSuccess) {
1179
- onSuccess(shaderString);
1180
- }
1181
- }
1182
- else {
1183
- Tools.LoadFile(gltfRuntime.rootUrl + shader.uri, onSuccess, undefined, undefined, false, function (request) {
1184
- if (request && onError) {
1185
- onError(request.status + " " + request.statusText);
1186
- }
1187
- });
1188
- }
1189
- };
1190
- GLTFLoaderBase.LoadMaterialAsync = function (gltfRuntime, id, onSuccess, onError) {
1191
- var material = gltfRuntime.materials[id];
1192
- if (!material.technique) {
1193
- if (onError) {
1194
- onError("No technique found.");
1195
- }
1196
- return;
1197
- }
1198
- var technique = gltfRuntime.techniques[material.technique];
1199
- if (!technique) {
1200
- gltfRuntime.scene._blockEntityCollection = !!gltfRuntime.assetContainer;
1201
- var defaultMaterial = new StandardMaterial(id, gltfRuntime.scene);
1202
- defaultMaterial._parentContainer = gltfRuntime.assetContainer;
1203
- gltfRuntime.scene._blockEntityCollection = false;
1204
- defaultMaterial.diffuseColor = new Color3(0.5, 0.5, 0.5);
1205
- defaultMaterial.sideOrientation = Material.CounterClockWiseSideOrientation;
1206
- onSuccess(defaultMaterial);
1207
- return;
1208
- }
1209
- var program = gltfRuntime.programs[technique.program];
1210
- var states = technique.states;
1211
- var vertexShader = Effect.ShadersStore[program.vertexShader + "VertexShader"];
1212
- var pixelShader = Effect.ShadersStore[program.fragmentShader + "PixelShader"];
1213
- var newVertexShader = "";
1214
- var newPixelShader = "";
1215
- var vertexTokenizer = new Tokenizer(vertexShader);
1216
- var pixelTokenizer = new Tokenizer(pixelShader);
1217
- var unTreatedUniforms = {};
1218
- var uniforms = [];
1219
- var attributes = [];
1220
- var samplers = [];
1221
- // Fill uniform, sampler2D and attributes
1222
- for (var unif in technique.uniforms) {
1223
- var uniform = technique.uniforms[unif];
1224
- var uniformParameter = technique.parameters[uniform];
1225
- unTreatedUniforms[unif] = uniformParameter;
1226
- if (uniformParameter.semantic && !uniformParameter.node && !uniformParameter.source) {
1227
- var transformIndex = glTFTransforms.indexOf(uniformParameter.semantic);
1228
- if (transformIndex !== -1) {
1229
- uniforms.push(babylonTransforms[transformIndex]);
1230
- delete unTreatedUniforms[unif];
1231
- }
1232
- else {
1233
- uniforms.push(unif);
1234
- }
1235
- }
1236
- else if (uniformParameter.type === EParameterType.SAMPLER_2D) {
1237
- samplers.push(unif);
1238
- }
1239
- else {
1240
- uniforms.push(unif);
1241
- }
1242
- }
1243
- for (var attr in technique.attributes) {
1244
- var attribute = technique.attributes[attr];
1245
- var attributeParameter = technique.parameters[attribute];
1246
- if (attributeParameter.semantic) {
1247
- var name_1 = getAttribute(attributeParameter);
1248
- if (name_1) {
1249
- attributes.push(name_1);
1250
- }
1251
- }
1252
- }
1253
- // Configure vertex shader
1254
- while (!vertexTokenizer.isEnd() && vertexTokenizer.getNextToken()) {
1255
- var tokenType = vertexTokenizer.currentToken;
1256
- if (tokenType !== ETokenType.IDENTIFIER) {
1257
- newVertexShader += vertexTokenizer.currentString;
1258
- continue;
1259
- }
1260
- var foundAttribute = false;
1261
- for (var attr in technique.attributes) {
1262
- var attribute = technique.attributes[attr];
1263
- var attributeParameter = technique.parameters[attribute];
1264
- if (vertexTokenizer.currentIdentifier === attr && attributeParameter.semantic) {
1265
- newVertexShader += getAttribute(attributeParameter);
1266
- foundAttribute = true;
1267
- break;
1268
- }
1269
- }
1270
- if (foundAttribute) {
1271
- continue;
1272
- }
1273
- newVertexShader += parseShaderUniforms(vertexTokenizer, technique, unTreatedUniforms);
1274
- }
1275
- // Configure pixel shader
1276
- while (!pixelTokenizer.isEnd() && pixelTokenizer.getNextToken()) {
1277
- var tokenType = pixelTokenizer.currentToken;
1278
- if (tokenType !== ETokenType.IDENTIFIER) {
1279
- newPixelShader += pixelTokenizer.currentString;
1280
- continue;
1281
- }
1282
- newPixelShader += parseShaderUniforms(pixelTokenizer, technique, unTreatedUniforms);
1283
- }
1284
- // Create shader material
1285
- var shaderPath = {
1286
- vertex: program.vertexShader + id,
1287
- fragment: program.fragmentShader + id
1288
- };
1289
- var options = {
1290
- attributes: attributes,
1291
- uniforms: uniforms,
1292
- samplers: samplers,
1293
- needAlphaBlending: states && states.enable && states.enable.indexOf(3042) !== -1
1294
- };
1295
- Effect.ShadersStore[program.vertexShader + id + "VertexShader"] = newVertexShader;
1296
- Effect.ShadersStore[program.fragmentShader + id + "PixelShader"] = newPixelShader;
1297
- var shaderMaterial = new ShaderMaterial(id, gltfRuntime.scene, shaderPath, options);
1298
- shaderMaterial.onError = onShaderCompileError(program, shaderMaterial, onError);
1299
- shaderMaterial.onCompiled = onShaderCompileSuccess(gltfRuntime, shaderMaterial, technique, material, unTreatedUniforms, onSuccess);
1300
- shaderMaterial.sideOrientation = Material.CounterClockWiseSideOrientation;
1301
- if (states && states.functions) {
1302
- var functions = states.functions;
1303
- if (functions.cullFace && functions.cullFace[0] !== ECullingType.BACK) {
1304
- shaderMaterial.backFaceCulling = false;
1305
- }
1306
- var blendFunc = functions.blendFuncSeparate;
1307
- if (blendFunc) {
1308
- if (blendFunc[0] === EBlendingFunction.SRC_ALPHA && blendFunc[1] === EBlendingFunction.ONE_MINUS_SRC_ALPHA && blendFunc[2] === EBlendingFunction.ONE && blendFunc[3] === EBlendingFunction.ONE) {
1309
- shaderMaterial.alphaMode = Constants.ALPHA_COMBINE;
1310
- }
1311
- else if (blendFunc[0] === EBlendingFunction.ONE && blendFunc[1] === EBlendingFunction.ONE && blendFunc[2] === EBlendingFunction.ZERO && blendFunc[3] === EBlendingFunction.ONE) {
1312
- shaderMaterial.alphaMode = Constants.ALPHA_ONEONE;
1313
- }
1314
- else if (blendFunc[0] === EBlendingFunction.SRC_ALPHA && blendFunc[1] === EBlendingFunction.ONE && blendFunc[2] === EBlendingFunction.ZERO && blendFunc[3] === EBlendingFunction.ONE) {
1315
- shaderMaterial.alphaMode = Constants.ALPHA_ADD;
1316
- }
1317
- else if (blendFunc[0] === EBlendingFunction.ZERO && blendFunc[1] === EBlendingFunction.ONE_MINUS_SRC_COLOR && blendFunc[2] === EBlendingFunction.ONE && blendFunc[3] === EBlendingFunction.ONE) {
1318
- shaderMaterial.alphaMode = Constants.ALPHA_SUBTRACT;
1319
- }
1320
- else if (blendFunc[0] === EBlendingFunction.DST_COLOR && blendFunc[1] === EBlendingFunction.ZERO && blendFunc[2] === EBlendingFunction.ONE && blendFunc[3] === EBlendingFunction.ONE) {
1321
- shaderMaterial.alphaMode = Constants.ALPHA_MULTIPLY;
1322
- }
1323
- else if (blendFunc[0] === EBlendingFunction.SRC_ALPHA && blendFunc[1] === EBlendingFunction.ONE_MINUS_SRC_COLOR && blendFunc[2] === EBlendingFunction.ONE && blendFunc[3] === EBlendingFunction.ONE) {
1324
- shaderMaterial.alphaMode = Constants.ALPHA_MAXIMIZED;
1325
- }
1326
- }
1327
- }
1328
- };
1329
- return GLTFLoaderBase;
1330
- }());
1331
- export { GLTFLoaderBase };
1332
- /**
1333
- * glTF V1 Loader
1334
- * @hidden
1335
- */
1336
- var GLTFLoader = /** @class */ (function () {
1337
- function GLTFLoader() {
1338
- }
1339
- GLTFLoader.RegisterExtension = function (extension) {
1340
- if (GLTFLoader.Extensions[extension.name]) {
1341
- Tools.Error("Tool with the same name \"" + extension.name + "\" already exists");
1342
- return;
1343
- }
1344
- GLTFLoader.Extensions[extension.name] = extension;
1345
- };
1346
- GLTFLoader.prototype.dispose = function () {
1347
- // do nothing
1348
- };
1349
- GLTFLoader.prototype._importMeshAsync = function (meshesNames, scene, data, rootUrl, assetContainer, onSuccess, onProgress, onError) {
1350
- var _this = this;
1351
- scene.useRightHandedSystem = true;
1352
- GLTFLoaderExtension.LoadRuntimeAsync(scene, data, rootUrl, function (gltfRuntime) {
1353
- gltfRuntime.assetContainer = assetContainer;
1354
- gltfRuntime.importOnlyMeshes = true;
1355
- if (meshesNames === "") {
1356
- gltfRuntime.importMeshesNames = [];
1357
- }
1358
- else if (typeof meshesNames === "string") {
1359
- gltfRuntime.importMeshesNames = [meshesNames];
1360
- }
1361
- else if (meshesNames && !(meshesNames instanceof Array)) {
1362
- gltfRuntime.importMeshesNames = [meshesNames];
1363
- }
1364
- else {
1365
- gltfRuntime.importMeshesNames = [];
1366
- Tools.Warn("Argument meshesNames must be of type string or string[]");
1367
- }
1368
- // Create nodes
1369
- _this._createNodes(gltfRuntime);
1370
- var meshes = new Array();
1371
- var skeletons = new Array();
1372
- // Fill arrays of meshes and skeletons
1373
- for (var nde in gltfRuntime.nodes) {
1374
- var node = gltfRuntime.nodes[nde];
1375
- if (node.babylonNode instanceof AbstractMesh) {
1376
- meshes.push(node.babylonNode);
1377
- }
1378
- }
1379
- for (var skl in gltfRuntime.skins) {
1380
- var skin = gltfRuntime.skins[skl];
1381
- if (skin.babylonSkeleton instanceof Skeleton) {
1382
- skeletons.push(skin.babylonSkeleton);
1383
- }
1384
- }
1385
- // Load buffers, shaders, materials, etc.
1386
- _this._loadBuffersAsync(gltfRuntime, function () {
1387
- _this._loadShadersAsync(gltfRuntime, function () {
1388
- importMaterials(gltfRuntime);
1389
- postLoad(gltfRuntime);
1390
- if (!GLTFFileLoader.IncrementalLoading && onSuccess) {
1391
- onSuccess(meshes, skeletons);
1392
- }
1393
- });
1394
- }, onProgress);
1395
- if (GLTFFileLoader.IncrementalLoading && onSuccess) {
1396
- onSuccess(meshes, skeletons);
1397
- }
1398
- }, onError);
1399
- return true;
1400
- };
1401
- /**
1402
- * Imports one or more meshes from a loaded gltf file and adds them to the scene
1403
- * @param meshesNames a string or array of strings of the mesh names that should be loaded from the file
1404
- * @param scene the scene the meshes should be added to
1405
- * @param assetContainer defines the asset container to use (can be null)
1406
- * @param data gltf data containing information of the meshes in a loaded file
1407
- * @param rootUrl root url to load from
1408
- * @param onProgress event that fires when loading progress has occured
1409
- * @returns a promise containg the loaded meshes, particles, skeletons and animations
1410
- */
1411
- GLTFLoader.prototype.importMeshAsync = function (meshesNames, scene, assetContainer, data, rootUrl, onProgress) {
1412
- var _this = this;
1413
- return new Promise(function (resolve, reject) {
1414
- _this._importMeshAsync(meshesNames, scene, data, rootUrl, assetContainer, function (meshes, skeletons) {
1415
- resolve({
1416
- meshes: meshes,
1417
- particleSystems: [],
1418
- skeletons: skeletons,
1419
- animationGroups: [],
1420
- lights: [],
1421
- transformNodes: [],
1422
- geometries: []
1423
- });
1424
- }, onProgress, function (message) {
1425
- reject(new Error(message));
1426
- });
1427
- });
1428
- };
1429
- GLTFLoader.prototype._loadAsync = function (scene, data, rootUrl, onSuccess, onProgress, onError) {
1430
- var _this = this;
1431
- scene.useRightHandedSystem = true;
1432
- GLTFLoaderExtension.LoadRuntimeAsync(scene, data, rootUrl, function (gltfRuntime) {
1433
- // Load runtime extensios
1434
- GLTFLoaderExtension.LoadRuntimeExtensionsAsync(gltfRuntime, function () {
1435
- // Create nodes
1436
- _this._createNodes(gltfRuntime);
1437
- // Load buffers, shaders, materials, etc.
1438
- _this._loadBuffersAsync(gltfRuntime, function () {
1439
- _this._loadShadersAsync(gltfRuntime, function () {
1440
- importMaterials(gltfRuntime);
1441
- postLoad(gltfRuntime);
1442
- if (!GLTFFileLoader.IncrementalLoading) {
1443
- onSuccess();
1444
- }
1445
- });
1446
- });
1447
- if (GLTFFileLoader.IncrementalLoading) {
1448
- onSuccess();
1449
- }
1450
- }, onError);
1451
- }, onError);
1452
- };
1453
- /**
1454
- * Imports all objects from a loaded gltf file and adds them to the scene
1455
- * @param scene the scene the objects should be added to
1456
- * @param data gltf data containing information of the meshes in a loaded file
1457
- * @param rootUrl root url to load from
1458
- * @param onProgress event that fires when loading progress has occured
1459
- * @returns a promise which completes when objects have been loaded to the scene
1460
- */
1461
- GLTFLoader.prototype.loadAsync = function (scene, data, rootUrl, onProgress) {
1462
- var _this = this;
1463
- return new Promise(function (resolve, reject) {
1464
- _this._loadAsync(scene, data, rootUrl, function () {
1465
- resolve();
1466
- }, onProgress, function (message) {
1467
- reject(new Error(message));
1468
- });
1469
- });
1470
- };
1471
- GLTFLoader.prototype._loadShadersAsync = function (gltfRuntime, onload) {
1472
- var hasShaders = false;
1473
- var processShader = function (sha, shader) {
1474
- GLTFLoaderExtension.LoadShaderStringAsync(gltfRuntime, sha, function (shaderString) {
1475
- if (shaderString instanceof ArrayBuffer) {
1476
- return;
1477
- }
1478
- gltfRuntime.loadedShaderCount++;
1479
- if (shaderString) {
1480
- Effect.ShadersStore[sha + (shader.type === EShaderType.VERTEX ? "VertexShader" : "PixelShader")] = shaderString;
1481
- }
1482
- if (gltfRuntime.loadedShaderCount === gltfRuntime.shaderscount) {
1483
- onload();
1484
- }
1485
- }, function () {
1486
- Tools.Error("Error when loading shader program named " + sha + " located at " + shader.uri);
1487
- });
1488
- };
1489
- for (var sha in gltfRuntime.shaders) {
1490
- hasShaders = true;
1491
- var shader = gltfRuntime.shaders[sha];
1492
- if (shader) {
1493
- processShader.bind(this, sha, shader)();
1494
- }
1495
- else {
1496
- Tools.Error("No shader named: " + sha);
1497
- }
1498
- }
1499
- if (!hasShaders) {
1500
- onload();
1501
- }
1502
- };
1503
- GLTFLoader.prototype._loadBuffersAsync = function (gltfRuntime, onLoad, onProgress) {
1504
- var hasBuffers = false;
1505
- var processBuffer = function (buf, buffer) {
1506
- GLTFLoaderExtension.LoadBufferAsync(gltfRuntime, buf, function (bufferView) {
1507
- gltfRuntime.loadedBufferCount++;
1508
- if (bufferView) {
1509
- if (bufferView.byteLength != gltfRuntime.buffers[buf].byteLength) {
1510
- Tools.Error("Buffer named " + buf + " is length " + bufferView.byteLength + ". Expected: " + buffer.byteLength); // Improve error message
1511
- }
1512
- gltfRuntime.loadedBufferViews[buf] = bufferView;
1513
- }
1514
- if (gltfRuntime.loadedBufferCount === gltfRuntime.buffersCount) {
1515
- onLoad();
1516
- }
1517
- }, function () {
1518
- Tools.Error("Error when loading buffer named " + buf + " located at " + buffer.uri);
1519
- });
1520
- };
1521
- for (var buf in gltfRuntime.buffers) {
1522
- hasBuffers = true;
1523
- var buffer = gltfRuntime.buffers[buf];
1524
- if (buffer) {
1525
- processBuffer.bind(this, buf, buffer)();
1526
- }
1527
- else {
1528
- Tools.Error("No buffer named: " + buf);
1529
- }
1530
- }
1531
- if (!hasBuffers) {
1532
- onLoad();
1533
- }
1534
- };
1535
- GLTFLoader.prototype._createNodes = function (gltfRuntime) {
1536
- var currentScene = gltfRuntime.currentScene;
1537
- if (currentScene) {
1538
- // Only one scene even if multiple scenes are defined
1539
- for (var i = 0; i < currentScene.nodes.length; i++) {
1540
- traverseNodes(gltfRuntime, currentScene.nodes[i], null);
1541
- }
1542
- }
1543
- else {
1544
- // Load all scenes
1545
- for (var thing in gltfRuntime.scenes) {
1546
- currentScene = gltfRuntime.scenes[thing];
1547
- for (var i = 0; i < currentScene.nodes.length; i++) {
1548
- traverseNodes(gltfRuntime, currentScene.nodes[i], null);
1549
- }
1550
- }
1551
- }
1552
- };
1553
- GLTFLoader.Extensions = {};
1554
- return GLTFLoader;
1555
- }());
1556
- export { GLTFLoader };
1557
- /** @hidden */
1558
- var GLTFLoaderExtension = /** @class */ (function () {
1559
- function GLTFLoaderExtension(name) {
1560
- this._name = name;
1561
- }
1562
- Object.defineProperty(GLTFLoaderExtension.prototype, "name", {
1563
- get: function () {
1564
- return this._name;
1565
- },
1566
- enumerable: false,
1567
- configurable: true
1568
- });
1569
- /**
1570
- * Defines an override for loading the runtime
1571
- * Return true to stop further extensions from loading the runtime
1572
- */
1573
- GLTFLoaderExtension.prototype.loadRuntimeAsync = function (scene, data, rootUrl, onSuccess, onError) {
1574
- return false;
1575
- };
1576
- /**
1577
- * Defines an onverride for creating gltf runtime
1578
- * Return true to stop further extensions from creating the runtime
1579
- */
1580
- GLTFLoaderExtension.prototype.loadRuntimeExtensionsAsync = function (gltfRuntime, onSuccess, onError) {
1581
- return false;
1582
- };
1583
- /**
1584
- * Defines an override for loading buffers
1585
- * Return true to stop further extensions from loading this buffer
1586
- */
1587
- GLTFLoaderExtension.prototype.loadBufferAsync = function (gltfRuntime, id, onSuccess, onError, onProgress) {
1588
- return false;
1589
- };
1590
- /**
1591
- * Defines an override for loading texture buffers
1592
- * Return true to stop further extensions from loading this texture data
1593
- */
1594
- GLTFLoaderExtension.prototype.loadTextureBufferAsync = function (gltfRuntime, id, onSuccess, onError) {
1595
- return false;
1596
- };
1597
- /**
1598
- * Defines an override for creating textures
1599
- * Return true to stop further extensions from loading this texture
1600
- */
1601
- GLTFLoaderExtension.prototype.createTextureAsync = function (gltfRuntime, id, buffer, onSuccess, onError) {
1602
- return false;
1603
- };
1604
- /**
1605
- * Defines an override for loading shader strings
1606
- * Return true to stop further extensions from loading this shader data
1607
- */
1608
- GLTFLoaderExtension.prototype.loadShaderStringAsync = function (gltfRuntime, id, onSuccess, onError) {
1609
- return false;
1610
- };
1611
- /**
1612
- * Defines an override for loading materials
1613
- * Return true to stop further extensions from loading this material
1614
- */
1615
- GLTFLoaderExtension.prototype.loadMaterialAsync = function (gltfRuntime, id, onSuccess, onError) {
1616
- return false;
1617
- };
1618
- // ---------
1619
- // Utilities
1620
- // ---------
1621
- GLTFLoaderExtension.LoadRuntimeAsync = function (scene, data, rootUrl, onSuccess, onError) {
1622
- GLTFLoaderExtension.ApplyExtensions(function (loaderExtension) {
1623
- return loaderExtension.loadRuntimeAsync(scene, data, rootUrl, onSuccess, onError);
1624
- }, function () {
1625
- setTimeout(function () {
1626
- if (!onSuccess) {
1627
- return;
1628
- }
1629
- onSuccess(GLTFLoaderBase.CreateRuntime(data.json, scene, rootUrl));
1630
- });
1631
- });
1632
- };
1633
- GLTFLoaderExtension.LoadRuntimeExtensionsAsync = function (gltfRuntime, onSuccess, onError) {
1634
- GLTFLoaderExtension.ApplyExtensions(function (loaderExtension) {
1635
- return loaderExtension.loadRuntimeExtensionsAsync(gltfRuntime, onSuccess, onError);
1636
- }, function () {
1637
- setTimeout(function () {
1638
- onSuccess();
1639
- });
1640
- });
1641
- };
1642
- GLTFLoaderExtension.LoadBufferAsync = function (gltfRuntime, id, onSuccess, onError, onProgress) {
1643
- GLTFLoaderExtension.ApplyExtensions(function (loaderExtension) {
1644
- return loaderExtension.loadBufferAsync(gltfRuntime, id, onSuccess, onError, onProgress);
1645
- }, function () {
1646
- GLTFLoaderBase.LoadBufferAsync(gltfRuntime, id, onSuccess, onError, onProgress);
1647
- });
1648
- };
1649
- GLTFLoaderExtension.LoadTextureAsync = function (gltfRuntime, id, onSuccess, onError) {
1650
- GLTFLoaderExtension.LoadTextureBufferAsync(gltfRuntime, id, function (buffer) {
1651
- if (buffer) {
1652
- GLTFLoaderExtension.CreateTextureAsync(gltfRuntime, id, buffer, onSuccess, onError);
1653
- }
1654
- }, onError);
1655
- };
1656
- GLTFLoaderExtension.LoadShaderStringAsync = function (gltfRuntime, id, onSuccess, onError) {
1657
- GLTFLoaderExtension.ApplyExtensions(function (loaderExtension) {
1658
- return loaderExtension.loadShaderStringAsync(gltfRuntime, id, onSuccess, onError);
1659
- }, function () {
1660
- GLTFLoaderBase.LoadShaderStringAsync(gltfRuntime, id, onSuccess, onError);
1661
- });
1662
- };
1663
- GLTFLoaderExtension.LoadMaterialAsync = function (gltfRuntime, id, onSuccess, onError) {
1664
- GLTFLoaderExtension.ApplyExtensions(function (loaderExtension) {
1665
- return loaderExtension.loadMaterialAsync(gltfRuntime, id, onSuccess, onError);
1666
- }, function () {
1667
- GLTFLoaderBase.LoadMaterialAsync(gltfRuntime, id, onSuccess, onError);
1668
- });
1669
- };
1670
- GLTFLoaderExtension.LoadTextureBufferAsync = function (gltfRuntime, id, onSuccess, onError) {
1671
- GLTFLoaderExtension.ApplyExtensions(function (loaderExtension) {
1672
- return loaderExtension.loadTextureBufferAsync(gltfRuntime, id, onSuccess, onError);
1673
- }, function () {
1674
- GLTFLoaderBase.LoadTextureBufferAsync(gltfRuntime, id, onSuccess, onError);
1675
- });
1676
- };
1677
- GLTFLoaderExtension.CreateTextureAsync = function (gltfRuntime, id, buffer, onSuccess, onError) {
1678
- GLTFLoaderExtension.ApplyExtensions(function (loaderExtension) {
1679
- return loaderExtension.createTextureAsync(gltfRuntime, id, buffer, onSuccess, onError);
1680
- }, function () {
1681
- GLTFLoaderBase.CreateTextureAsync(gltfRuntime, id, buffer, onSuccess, onError);
1682
- });
1683
- };
1684
- GLTFLoaderExtension.ApplyExtensions = function (func, defaultFunc) {
1685
- for (var extensionName in GLTFLoader.Extensions) {
1686
- var loaderExtension = GLTFLoader.Extensions[extensionName];
1687
- if (func(loaderExtension)) {
1688
- return;
1689
- }
1690
- }
1691
- defaultFunc();
1692
- };
1693
- return GLTFLoaderExtension;
1694
- }());
1695
- export { GLTFLoaderExtension };
1696
- GLTFFileLoader._CreateGLTF1Loader = function () { return new GLTFLoader(); };
1697
- //# sourceMappingURL=glTFLoader.js.map