@galacean/engine-loader 1.0.0-beta.9 → 1.0.1
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.
- package/dist/main.js +534 -411
- package/dist/main.js.map +1 -1
- package/dist/miniprogram.js +534 -411
- package/dist/module.js +536 -413
- package/dist/module.js.map +1 -1
- package/package.json +5 -5
- package/types/GLTFContentRestorer.d.ts +18 -8
- package/types/ProjectLoader.d.ts +1 -0
- package/types/gltf/GLTFResource.d.ts +2 -6
- package/types/gltf/GLTFUtil.d.ts +3 -3
- package/types/gltf/GLTFUtils.d.ts +3 -2
- package/types/gltf/extensions/GLTFExtensionSchema.d.ts +1 -1
- package/types/gltf/parser/GLTFAnimationParser.d.ts +2 -2
- package/types/gltf/parser/GLTFMeshParser.d.ts +5 -5
- package/types/gltf/parser/GLTFParser.d.ts +1 -1
- package/types/gltf/parser/GLTFParserContext.d.ts +7 -2
- package/types/gltf/parser/GLTFSceneParser.d.ts +2 -2
- package/types/gltf/parser/GLTFSchemaParser.d.ts +7 -0
- package/types/gltf/parser/GLTFSkinParser.d.ts +2 -1
- package/types/gltf/parser/GLTFTextureParser.d.ts +3 -2
- package/types/ktx2/BinomialLLCTranscoder/BinomialLLCTranscoder.d.ts +13 -0
- package/types/ktx2/BinomialLLCTranscoder/TranscodeWorkerCode.d.ts +33 -0
- package/types/ktx2/KTX2Container.d.ts +72 -0
- package/types/ktx2/KTX2Loader.d.ts +53 -0
- package/types/ktx2/KTX2TargetFormat.d.ts +21 -0
- package/types/ktx2/KhronosTranscoder/KhronosTranscoder.d.ts +17 -0
- package/types/ktx2/KhronosTranscoder/TranscoderWorkerCode.d.ts +34 -0
- package/types/ktx2/TranscodeResult.d.ts +10 -0
- package/types/ktx2/WorkerPool.d.ts +32 -0
- package/types/ktx2/constants.d.ts +7 -0
- package/types/ktx2/transcoder/AbstractTranscoder.d.ts +55 -0
- package/types/ktx2/transcoder/BinomialLLCTranscoder.d.ts +8 -0
- package/types/ktx2/transcoder/BinomialLLCWorkerCode.d.ts +2 -0
- package/types/ktx2/transcoder/KhronosTranscoder.d.ts +13 -0
- package/types/ktx2/transcoder/KhronosWorkerCode.d.ts +1 -0
- package/types/ktx2/zstddec.d.ts +62 -0
- package/types/resource-deserialize/index.d.ts +3 -3
- package/types/resource-deserialize/resources/mesh/MeshDecoder.d.ts +1 -1
- package/types/resource-deserialize/resources/parser/PrefabParser.d.ts +5 -0
- package/types/resource-deserialize/resources/parser/ReflectionParser.d.ts +14 -0
- package/types/resource-deserialize/resources/prefab/PrefabDesign.d.ts +4 -4
- package/types/resource-deserialize/resources/scene/SceneParser.d.ts +1 -1
- package/types/resource-deserialize/resources/scene/SceneParserContext.d.ts +1 -1
- package/types/resource-deserialize/resources/schema/BasicSchema.d.ts +61 -0
- package/types/resource-deserialize/resources/schema/MaterialSchema.d.ts +91 -0
- package/types/resource-deserialize/resources/schema/ProjectSchema.d.ts +9 -0
- package/types/resource-deserialize/resources/schema/SceneSchema.d.ts +41 -0
- package/types/resource-deserialize/resources/schema/index.d.ts +3 -0
package/dist/miniprogram.js
CHANGED
|
@@ -122,7 +122,8 @@ var AnimatorControllerLoader = /*#__PURE__*/ function(Loader1) {
|
|
|
122
122
|
state.wrapMode = wrapMode;
|
|
123
123
|
state.clipStartTime = clipStartNormalizedTime;
|
|
124
124
|
state.clipEndTime = clipEndNormalizedTime;
|
|
125
|
-
|
|
125
|
+
var scriptsObject = JSON.parse(scripts);
|
|
126
|
+
scriptsObject == null ? void 0 : scriptsObject.forEach(function(script) {
|
|
126
127
|
state.addStateMachineScript(miniprogram.Loader.getClass(script));
|
|
127
128
|
});
|
|
128
129
|
if (clipData) {
|
|
@@ -222,7 +223,8 @@ var EnvLoader = /*#__PURE__*/ function(Loader) {
|
|
|
222
223
|
var shArray = new Float32Array(arraybuffer, 0, 27);
|
|
223
224
|
var shByteLength = 27 * 4;
|
|
224
225
|
var size = (_ref = new Uint16Array(arraybuffer, shByteLength, 1)) == null ? void 0 : _ref[0];
|
|
225
|
-
var
|
|
226
|
+
var engine = resourceManager.engine;
|
|
227
|
+
var texture = new miniprogram.TextureCube(engine, size);
|
|
226
228
|
texture.filterMode = miniprogram.TextureFilterMode.Trilinear;
|
|
227
229
|
var mipmapCount = texture.mipmapCount;
|
|
228
230
|
var offset = shByteLength + 2;
|
|
@@ -235,7 +237,7 @@ var EnvLoader = /*#__PURE__*/ function(Loader) {
|
|
|
235
237
|
texture.setPixelBuffer(miniprogram.TextureCubeFace.PositiveX + face, data, mipLevel);
|
|
236
238
|
}
|
|
237
239
|
}
|
|
238
|
-
var ambientLight = new miniprogram.AmbientLight();
|
|
240
|
+
var ambientLight = new miniprogram.AmbientLight(engine);
|
|
239
241
|
var sh = new miniprogram$1.SphericalHarmonics3();
|
|
240
242
|
ambientLight.diffuseMode = miniprogram.DiffuseMode.SphericalHarmonics;
|
|
241
243
|
sh.copyFromArray(shArray);
|
|
@@ -442,15 +444,18 @@ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
|
|
|
442
444
|
for(var _iterator2 = _create_for_of_iterator_helper_loose(meshInfo.blendShapes), _step2; !(_step2 = _iterator2()).done;){
|
|
443
445
|
var restoreInfo = _step2.value;
|
|
444
446
|
var frame = restoreInfo.blendShape.frames[0];
|
|
445
|
-
var
|
|
446
|
-
|
|
447
|
+
var position = restoreInfo.position;
|
|
448
|
+
var positionData = _this._getBufferData(buffers, position.buffer);
|
|
449
|
+
frame.deltaPositions = GLTFUtils.bufferToVector3Array(positionData, position.stride, position.byteOffset, position.count);
|
|
447
450
|
if (restoreInfo.normal) {
|
|
448
|
-
var
|
|
449
|
-
|
|
451
|
+
var normal = restoreInfo.normal;
|
|
452
|
+
var normalData = _this._getBufferData(buffers, normal.buffer);
|
|
453
|
+
frame.deltaNormals = GLTFUtils.bufferToVector3Array(normalData, normal.stride, normal.byteOffset, normal.count);
|
|
450
454
|
}
|
|
451
455
|
if (restoreInfo.tangent) {
|
|
452
|
-
var
|
|
453
|
-
|
|
456
|
+
var tangent = restoreInfo.tangent;
|
|
457
|
+
var tangentData = _this._getBufferData(buffers, tangent.buffer);
|
|
458
|
+
frame.deltaTangents = GLTFUtils.bufferToVector3Array(tangentData, tangent.stride, tangent.byteOffset, tangent.count);
|
|
454
459
|
}
|
|
455
460
|
}
|
|
456
461
|
mesh.uploadData(true);
|
|
@@ -534,6 +539,14 @@ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
|
|
|
534
539
|
this.normal = normal;
|
|
535
540
|
this.tangent = tangent;
|
|
536
541
|
};
|
|
542
|
+
/**
|
|
543
|
+
* @internal
|
|
544
|
+
*/ var BlendShapeDataRestoreInfo = function BlendShapeDataRestoreInfo(buffer, stride, byteOffset, count) {
|
|
545
|
+
this.buffer = buffer;
|
|
546
|
+
this.stride = stride;
|
|
547
|
+
this.byteOffset = byteOffset;
|
|
548
|
+
this.count = count;
|
|
549
|
+
};
|
|
537
550
|
|
|
538
551
|
/**
|
|
539
552
|
* Module for glTF 2.0 Interface
|
|
@@ -705,6 +718,11 @@ var TextureWrapMode;
|
|
|
705
718
|
promiseMap["" + url] = this._initPromiseInfo(this.masterPromiseInfo);
|
|
706
719
|
}
|
|
707
720
|
var _proto = GLTFParserContext.prototype;
|
|
721
|
+
/**
|
|
722
|
+
* Get all the buffer data.
|
|
723
|
+
*/ _proto.getBuffers = function getBuffers() {
|
|
724
|
+
return Promise.resolve(this._buffers);
|
|
725
|
+
};
|
|
708
726
|
_proto._initPromiseInfo = function _initPromiseInfo(promiseInfo) {
|
|
709
727
|
var promise = new miniprogram.AssetPromise(function(resolve, reject, setProgress, onCancel) {
|
|
710
728
|
promiseInfo.resolve = resolve;
|
|
@@ -826,44 +844,58 @@ var TextureWrapMode;
|
|
|
826
844
|
}
|
|
827
845
|
};
|
|
828
846
|
GLTFUtils.getAccessorBuffer = function getAccessorBuffer(context, bufferViews, accessor) {
|
|
829
|
-
var buffers = context.buffers;
|
|
830
847
|
var componentType = accessor.componentType;
|
|
831
848
|
var bufferView = bufferViews[accessor.bufferView];
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
var
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
var
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
849
|
+
return context.getBuffers().then(function(buffers) {
|
|
850
|
+
var bufferIndex = bufferView.buffer;
|
|
851
|
+
var buffer = buffers[bufferIndex];
|
|
852
|
+
var _bufferView_byteOffset;
|
|
853
|
+
var bufferByteOffset = (_bufferView_byteOffset = bufferView.byteOffset) != null ? _bufferView_byteOffset : 0;
|
|
854
|
+
var _accessor_byteOffset;
|
|
855
|
+
var byteOffset = (_accessor_byteOffset = accessor.byteOffset) != null ? _accessor_byteOffset : 0;
|
|
856
|
+
var TypedArray = GLTFUtils.getComponentType(componentType);
|
|
857
|
+
var dataElementSize = GLTFUtils.getAccessorTypeSize(accessor.type);
|
|
858
|
+
var dataElementBytes = TypedArray.BYTES_PER_ELEMENT;
|
|
859
|
+
var elementStride = dataElementSize * dataElementBytes;
|
|
860
|
+
var accessorCount = accessor.count;
|
|
861
|
+
var bufferStride = bufferView.byteStride;
|
|
862
|
+
var bufferInfo;
|
|
863
|
+
// According to the glTF official documentation only byteStride not undefined is allowed
|
|
864
|
+
if (bufferStride !== undefined && bufferStride !== elementStride) {
|
|
865
|
+
var bufferSlice = Math.floor(byteOffset / bufferStride);
|
|
866
|
+
var bufferCacheKey = accessor.bufferView + ":" + componentType + ":" + bufferSlice + ":" + accessorCount;
|
|
867
|
+
var accessorBufferCache = context.accessorBufferCache;
|
|
868
|
+
bufferInfo = accessorBufferCache[bufferCacheKey];
|
|
869
|
+
if (!bufferInfo) {
|
|
870
|
+
var offset = bufferByteOffset + bufferSlice * bufferStride;
|
|
871
|
+
var count = accessorCount * (bufferStride / dataElementBytes);
|
|
872
|
+
var data = new TypedArray(buffer, offset, count);
|
|
873
|
+
accessorBufferCache[bufferCacheKey] = bufferInfo = new BufferInfo(data, true, bufferStride);
|
|
874
|
+
bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset, count));
|
|
875
|
+
}
|
|
876
|
+
} else {
|
|
877
|
+
var offset1 = bufferByteOffset + byteOffset;
|
|
878
|
+
var count1 = accessorCount * dataElementSize;
|
|
879
|
+
var data1 = new TypedArray(buffer, offset1, count1);
|
|
880
|
+
bufferInfo = new BufferInfo(data1, false, elementStride);
|
|
881
|
+
bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset1, count1));
|
|
855
882
|
}
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
883
|
+
if (accessor.sparse) {
|
|
884
|
+
GLTFUtils.processingSparseData(bufferViews, accessor, buffers, bufferInfo);
|
|
885
|
+
}
|
|
886
|
+
return bufferInfo;
|
|
887
|
+
});
|
|
888
|
+
};
|
|
889
|
+
GLTFUtils.bufferToVector3Array = function bufferToVector3Array(data, byteStride, accessorByteOffset, count) {
|
|
890
|
+
var bytesPerElement = data.BYTES_PER_ELEMENT;
|
|
891
|
+
var offset = accessorByteOffset % byteStride / bytesPerElement;
|
|
892
|
+
var stride = byteStride / bytesPerElement;
|
|
893
|
+
var vector3s = new Array(count);
|
|
894
|
+
for(var i = 0; i < count; i++){
|
|
895
|
+
var index = offset + i * stride;
|
|
896
|
+
vector3s[i] = new miniprogram$1.Vector3(data[index], data[index + 1], data[index + 2]);
|
|
865
897
|
}
|
|
866
|
-
return
|
|
898
|
+
return vector3s;
|
|
867
899
|
};
|
|
868
900
|
/**
|
|
869
901
|
* @deprecated
|
|
@@ -1329,7 +1361,7 @@ var GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
|
|
|
1329
1361
|
}
|
|
1330
1362
|
var _proto = GLTFAnimationParser.prototype;
|
|
1331
1363
|
_proto.parse = function parse(context) {
|
|
1332
|
-
var glTF = context.glTF
|
|
1364
|
+
var glTF = context.glTF, glTFResource = context.glTFResource;
|
|
1333
1365
|
glTFResource.entities;
|
|
1334
1366
|
var animations = glTF.animations; glTF.accessors; glTF.bufferViews;
|
|
1335
1367
|
if (!animations) {
|
|
@@ -1339,106 +1371,120 @@ var GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
|
|
|
1339
1371
|
var animationClipCount = animations.length;
|
|
1340
1372
|
var animationClipPromises = [];
|
|
1341
1373
|
new Array(animationClipCount);
|
|
1374
|
+
var parseStandardPropertyPromises = new Array();
|
|
1342
1375
|
for(var i = 0; i < animationClipCount; i++){
|
|
1343
1376
|
var animationInfo = animations[i];
|
|
1344
1377
|
var _animationInfo_name = animationInfo.name, name = _animationInfo_name === void 0 ? "AnimationClip" + i : _animationInfo_name;
|
|
1345
1378
|
var animationClip = GLTFParser.executeExtensionsCreateAndParse(animationInfo.extensions, context, animationInfo);
|
|
1346
1379
|
if (!animationClip) {
|
|
1347
1380
|
animationClip = new miniprogram.AnimationClip(name);
|
|
1348
|
-
GLTFAnimationParser._parseStandardProperty(context, animationClip, animationInfo);
|
|
1381
|
+
parseStandardPropertyPromises.push(GLTFAnimationParser._parseStandardProperty(context, animationClip, animationInfo));
|
|
1349
1382
|
}
|
|
1350
1383
|
animationClipPromises.push(animationClip);
|
|
1351
1384
|
}
|
|
1352
|
-
return miniprogram.AssetPromise.all(
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
var
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1385
|
+
return miniprogram.AssetPromise.all(parseStandardPropertyPromises).then(function() {
|
|
1386
|
+
return miniprogram.AssetPromise.all(animationClipPromises).then(function(animationClips) {
|
|
1387
|
+
glTFResource.animations = animationClips;
|
|
1388
|
+
for(var i = 0; i < glTF.animations.length; i++){
|
|
1389
|
+
var animationInfo = glTF.animations[i];
|
|
1390
|
+
GLTFParser.executeExtensionsAdditiveAndParse(animationInfo.extensions, context, animationClips[i], animationInfo);
|
|
1391
|
+
}
|
|
1392
|
+
animationClipsPromiseInfo.resolve(animationClips);
|
|
1393
|
+
return animationClipsPromiseInfo.promise;
|
|
1394
|
+
});
|
|
1360
1395
|
});
|
|
1361
1396
|
};
|
|
1362
1397
|
/**
|
|
1363
1398
|
* @internal
|
|
1364
1399
|
*/ GLTFAnimationParser._parseStandardProperty = function _parseStandardProperty(context, animationClip, animationInfo) {
|
|
1400
|
+
var _loop = function(j, m) {
|
|
1401
|
+
var gltfSampler = samplers[j];
|
|
1402
|
+
var inputAccessor = accessors[gltfSampler.input];
|
|
1403
|
+
var outputAccessor = accessors[gltfSampler.output];
|
|
1404
|
+
var promise = Promise.all([
|
|
1405
|
+
GLTFUtils.getAccessorBuffer(context, bufferViews, inputAccessor),
|
|
1406
|
+
GLTFUtils.getAccessorBuffer(context, bufferViews, outputAccessor)
|
|
1407
|
+
]).then(function(bufferInfos) {
|
|
1408
|
+
var input = bufferInfos[0].data;
|
|
1409
|
+
var output = bufferInfos[1].data;
|
|
1410
|
+
if (outputAccessor.normalized) {
|
|
1411
|
+
var scale = GLTFUtils.getNormalizedComponentScale(outputAccessor.componentType);
|
|
1412
|
+
var scaled = new Float32Array(output.length);
|
|
1413
|
+
for(var k = 0, v = output.length; k < v; k++){
|
|
1414
|
+
scaled[k] = output[k] * scale;
|
|
1415
|
+
}
|
|
1416
|
+
output = scaled;
|
|
1417
|
+
}
|
|
1418
|
+
var outputStride = output.length / input.length;
|
|
1419
|
+
var _gltfSampler_interpolation;
|
|
1420
|
+
var interpolation = (_gltfSampler_interpolation = gltfSampler.interpolation) != null ? _gltfSampler_interpolation : AnimationSamplerInterpolation.Linear;
|
|
1421
|
+
var samplerInterpolation;
|
|
1422
|
+
switch(interpolation){
|
|
1423
|
+
case AnimationSamplerInterpolation.CubicSpine:
|
|
1424
|
+
samplerInterpolation = miniprogram.InterpolationType.CubicSpine;
|
|
1425
|
+
break;
|
|
1426
|
+
case AnimationSamplerInterpolation.Step:
|
|
1427
|
+
samplerInterpolation = miniprogram.InterpolationType.Step;
|
|
1428
|
+
break;
|
|
1429
|
+
case AnimationSamplerInterpolation.Linear:
|
|
1430
|
+
samplerInterpolation = miniprogram.InterpolationType.Linear;
|
|
1431
|
+
break;
|
|
1432
|
+
}
|
|
1433
|
+
input[input.length - 1];
|
|
1434
|
+
sampleDataCollection.push({
|
|
1435
|
+
type: outputAccessor.type,
|
|
1436
|
+
interpolation: samplerInterpolation,
|
|
1437
|
+
input: input,
|
|
1438
|
+
output: output,
|
|
1439
|
+
outputSize: outputStride
|
|
1440
|
+
});
|
|
1441
|
+
});
|
|
1442
|
+
promises.push(promise);
|
|
1443
|
+
};
|
|
1444
|
+
var _this = this;
|
|
1365
1445
|
var glTF = context.glTF, glTFResource = context.glTFResource;
|
|
1366
1446
|
var entities = glTFResource.entities;
|
|
1367
1447
|
var accessors = glTF.accessors, bufferViews = glTF.bufferViews;
|
|
1368
1448
|
var channels = animationInfo.channels, samplers = animationInfo.samplers;
|
|
1369
1449
|
var sampleDataCollection = new Array();
|
|
1450
|
+
var promises = new Array();
|
|
1370
1451
|
// parse samplers
|
|
1371
|
-
for(var j = 0, m = samplers.length; j < m; j++)
|
|
1372
|
-
|
|
1373
|
-
var
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
var
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1452
|
+
for(var j = 0, m = samplers.length; j < m; j++)_loop(j);
|
|
1453
|
+
return Promise.all(promises).then(function() {
|
|
1454
|
+
for(var j = 0, m = channels.length; j < m; j++){
|
|
1455
|
+
var gltfChannel = channels[j];
|
|
1456
|
+
var target = gltfChannel.target;
|
|
1457
|
+
var channelTargetEntity = entities[target.node];
|
|
1458
|
+
var relativePath = "";
|
|
1459
|
+
var entity = channelTargetEntity;
|
|
1460
|
+
while(entity.parent){
|
|
1461
|
+
relativePath = relativePath === "" ? "" + entity.name : entity.name + "/" + relativePath;
|
|
1462
|
+
entity = entity.parent;
|
|
1382
1463
|
}
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
output: output,
|
|
1406
|
-
outputSize: outputStride
|
|
1407
|
-
});
|
|
1408
|
-
}
|
|
1409
|
-
for(var j1 = 0, m1 = channels.length; j1 < m1; j1++){
|
|
1410
|
-
var gltfChannel = channels[j1];
|
|
1411
|
-
var target = gltfChannel.target;
|
|
1412
|
-
var channelTargetEntity = entities[target.node];
|
|
1413
|
-
var relativePath = "";
|
|
1414
|
-
var entity = channelTargetEntity;
|
|
1415
|
-
while(entity.parent){
|
|
1416
|
-
relativePath = relativePath === "" ? "" + entity.name : entity.name + "/" + relativePath;
|
|
1417
|
-
entity = entity.parent;
|
|
1418
|
-
}
|
|
1419
|
-
var ComponentType = void 0;
|
|
1420
|
-
var propertyName = void 0;
|
|
1421
|
-
switch(target.path){
|
|
1422
|
-
case AnimationChannelTargetPath.TRANSLATION:
|
|
1423
|
-
ComponentType = miniprogram.Transform;
|
|
1424
|
-
propertyName = "position";
|
|
1425
|
-
break;
|
|
1426
|
-
case AnimationChannelTargetPath.ROTATION:
|
|
1427
|
-
ComponentType = miniprogram.Transform;
|
|
1428
|
-
propertyName = "rotationQuaternion";
|
|
1429
|
-
break;
|
|
1430
|
-
case AnimationChannelTargetPath.SCALE:
|
|
1431
|
-
ComponentType = miniprogram.Transform;
|
|
1432
|
-
propertyName = "scale";
|
|
1433
|
-
break;
|
|
1434
|
-
case AnimationChannelTargetPath.WEIGHTS:
|
|
1435
|
-
ComponentType = miniprogram.SkinnedMeshRenderer;
|
|
1436
|
-
propertyName = "blendShapeWeights";
|
|
1437
|
-
break;
|
|
1464
|
+
var ComponentType = void 0;
|
|
1465
|
+
var propertyName = void 0;
|
|
1466
|
+
switch(target.path){
|
|
1467
|
+
case AnimationChannelTargetPath.TRANSLATION:
|
|
1468
|
+
ComponentType = miniprogram.Transform;
|
|
1469
|
+
propertyName = "position";
|
|
1470
|
+
break;
|
|
1471
|
+
case AnimationChannelTargetPath.ROTATION:
|
|
1472
|
+
ComponentType = miniprogram.Transform;
|
|
1473
|
+
propertyName = "rotationQuaternion";
|
|
1474
|
+
break;
|
|
1475
|
+
case AnimationChannelTargetPath.SCALE:
|
|
1476
|
+
ComponentType = miniprogram.Transform;
|
|
1477
|
+
propertyName = "scale";
|
|
1478
|
+
break;
|
|
1479
|
+
case AnimationChannelTargetPath.WEIGHTS:
|
|
1480
|
+
ComponentType = miniprogram.SkinnedMeshRenderer;
|
|
1481
|
+
propertyName = "blendShapeWeights";
|
|
1482
|
+
break;
|
|
1483
|
+
}
|
|
1484
|
+
var curve = _this._addCurve(target.path, gltfChannel, sampleDataCollection);
|
|
1485
|
+
animationClip.addCurveBinding(relativePath, ComponentType, propertyName, curve);
|
|
1438
1486
|
}
|
|
1439
|
-
|
|
1440
|
-
animationClip.addCurveBinding(relativePath, ComponentType, propertyName, curve);
|
|
1441
|
-
}
|
|
1487
|
+
});
|
|
1442
1488
|
};
|
|
1443
1489
|
GLTFAnimationParser._addCurve = function _addCurve(animationChannelTargetPath, gltfChannel, sampleDataCollection) {
|
|
1444
1490
|
var sampleData = sampleDataCollection[gltfChannel.sampler];
|
|
@@ -1533,20 +1579,18 @@ var GLTFBufferParser = /*#__PURE__*/ function(GLTFParser) {
|
|
|
1533
1579
|
}).then(function(param) {
|
|
1534
1580
|
var glTF = param.glTF, buffers = param.buffers;
|
|
1535
1581
|
context.glTF = glTF;
|
|
1536
|
-
context.
|
|
1582
|
+
context._buffers = buffers;
|
|
1537
1583
|
});
|
|
1538
1584
|
} else {
|
|
1539
1585
|
return miniprogram.request(url, {
|
|
1540
1586
|
type: "json"
|
|
1541
1587
|
}).then(function(glTF) {
|
|
1542
1588
|
context.glTF = glTF;
|
|
1543
|
-
|
|
1589
|
+
context._buffers = Promise.all(glTF.buffers.map(function(buffer) {
|
|
1544
1590
|
var absoluteUrl = miniprogram.Utils.resolveAbsoluteUrl(url, buffer.uri);
|
|
1545
1591
|
restoreBufferRequests.push(new BufferRequestInfo(absoluteUrl, requestConfig));
|
|
1546
1592
|
return miniprogram.request(absoluteUrl, requestConfig);
|
|
1547
|
-
}))
|
|
1548
|
-
context.buffers = buffers;
|
|
1549
|
-
});
|
|
1593
|
+
}));
|
|
1550
1594
|
});
|
|
1551
1595
|
}
|
|
1552
1596
|
};
|
|
@@ -1625,6 +1669,10 @@ var GLTFEntityParser = /*#__PURE__*/ function(GLTFParser) {
|
|
|
1625
1669
|
}
|
|
1626
1670
|
sceneRoots[i] = rootEntity;
|
|
1627
1671
|
}
|
|
1672
|
+
// @ts-ignore
|
|
1673
|
+
sceneRoots[i]._hookResource = glTFResource;
|
|
1674
|
+
// @ts-ignore
|
|
1675
|
+
glTFResource._addReferCount(1);
|
|
1628
1676
|
}
|
|
1629
1677
|
glTFResource.sceneRoots = sceneRoots;
|
|
1630
1678
|
glTFResource.defaultSceneRoot = sceneRoots[sceneID];
|
|
@@ -1791,7 +1839,9 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
|
|
|
1791
1839
|
}
|
|
1792
1840
|
}, function() {
|
|
1793
1841
|
var indexAccessor = glTF.accessors[gltfPrimitive.indices];
|
|
1794
|
-
return
|
|
1842
|
+
return context.getBuffers().then(function(buffers) {
|
|
1843
|
+
return GLTFUtils.getAccessorData(glTF, indexAccessor, buffers);
|
|
1844
|
+
});
|
|
1795
1845
|
}, context.keepMeshData).then(resolve);
|
|
1796
1846
|
}
|
|
1797
1847
|
});
|
|
@@ -1801,7 +1851,7 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
|
|
|
1801
1851
|
for(var j = 0; j < gltfMesh.primitives.length; j++)_loop(j);
|
|
1802
1852
|
meshPromises[i] = Promise.all(primitivePromises);
|
|
1803
1853
|
};
|
|
1804
|
-
var glTF = context.glTF,
|
|
1854
|
+
var glTF = context.glTF, glTFResource = context.glTFResource;
|
|
1805
1855
|
var engine = glTFResource.engine;
|
|
1806
1856
|
if (!glTF.meshes) return;
|
|
1807
1857
|
var meshesPromiseInfo = context.meshesPromiseInfo;
|
|
@@ -1816,8 +1866,109 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
|
|
|
1816
1866
|
/**
|
|
1817
1867
|
* @internal
|
|
1818
1868
|
*/ GLTFMeshParser._parseMeshFromGLTFPrimitive = function _parseMeshFromGLTFPrimitive(context, mesh, meshRestoreInfo, gltfMesh, gltfPrimitive, gltf, getVertexBufferData, getBlendShapeData, getIndexBufferData, keepMeshData) {
|
|
1869
|
+
var _loop = function(attribute) {
|
|
1870
|
+
var accessor = accessors[attributes[attribute]];
|
|
1871
|
+
var promise = GLTFUtils.getAccessorBuffer(context, gltf.bufferViews, accessor).then(function(accessorBuffer) {
|
|
1872
|
+
var dataElementSize = GLTFUtils.getAccessorTypeSize(accessor.type);
|
|
1873
|
+
var accessorCount = accessor.count;
|
|
1874
|
+
var vertices = accessorBuffer.data;
|
|
1875
|
+
var vertexElement;
|
|
1876
|
+
var meshId = mesh.instanceId;
|
|
1877
|
+
var vertexBindingInfos = accessorBuffer.vertexBindingInfos;
|
|
1878
|
+
var elementNormalized = accessor.normalized;
|
|
1879
|
+
var elementFormat = GLTFUtils.getElementFormat(accessor.componentType, dataElementSize, elementNormalized);
|
|
1880
|
+
var scaleFactor;
|
|
1881
|
+
elementNormalized && (scaleFactor = GLTFUtils.getNormalizedComponentScale(accessor.componentType));
|
|
1882
|
+
var elementOffset;
|
|
1883
|
+
if (accessorBuffer.interleaved) {
|
|
1884
|
+
var byteOffset = accessor.byteOffset || 0;
|
|
1885
|
+
var stride = accessorBuffer.stride;
|
|
1886
|
+
elementOffset = byteOffset % stride;
|
|
1887
|
+
if (vertexBindingInfos[meshId] === undefined) {
|
|
1888
|
+
vertexElement = new miniprogram.VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
|
|
1889
|
+
var vertexBuffer = accessorBuffer.vertexBuffer;
|
|
1890
|
+
if (!vertexBuffer) {
|
|
1891
|
+
vertexBuffer = new miniprogram.Buffer(engine, miniprogram.BufferBindFlag.VertexBuffer, vertices.byteLength, miniprogram.BufferUsage.Static);
|
|
1892
|
+
vertexBuffer.setData(vertices);
|
|
1893
|
+
accessorBuffer.vertexBuffer = vertexBuffer;
|
|
1894
|
+
meshRestoreInfo.vertexBuffers.push(new BufferRestoreInfo(vertexBuffer, accessorBuffer.restoreInfo));
|
|
1895
|
+
}
|
|
1896
|
+
mesh.setVertexBufferBinding(vertexBuffer, stride, bufferBindIndex);
|
|
1897
|
+
vertexBindingInfos[meshId] = bufferBindIndex++;
|
|
1898
|
+
} else {
|
|
1899
|
+
vertexElement = new miniprogram.VertexElement(attribute, elementOffset, elementFormat, vertexBindingInfos[meshId]);
|
|
1900
|
+
}
|
|
1901
|
+
} else {
|
|
1902
|
+
elementOffset = 0;
|
|
1903
|
+
vertexElement = new miniprogram.VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
|
|
1904
|
+
var vertexBuffer1 = new miniprogram.Buffer(engine, miniprogram.BufferBindFlag.VertexBuffer, vertices.byteLength, miniprogram.BufferUsage.Static);
|
|
1905
|
+
vertexBuffer1.setData(vertices);
|
|
1906
|
+
meshRestoreInfo.vertexBuffers.push(new BufferRestoreInfo(vertexBuffer1, accessorBuffer.restoreInfo));
|
|
1907
|
+
mesh.setVertexBufferBinding(vertexBuffer1, accessorBuffer.stride, bufferBindIndex);
|
|
1908
|
+
vertexBindingInfos[meshId] = bufferBindIndex++;
|
|
1909
|
+
}
|
|
1910
|
+
vertexElements.push(vertexElement);
|
|
1911
|
+
if (attribute === "POSITION") {
|
|
1912
|
+
vertexCount = accessorCount;
|
|
1913
|
+
var _mesh_bounds = mesh.bounds, min = _mesh_bounds.min, max = _mesh_bounds.max;
|
|
1914
|
+
if (accessor.min && accessor.max) {
|
|
1915
|
+
min.copyFromArray(accessor.min);
|
|
1916
|
+
max.copyFromArray(accessor.max);
|
|
1917
|
+
if (keepMeshData) {
|
|
1918
|
+
var baseOffset = elementOffset / vertices.BYTES_PER_ELEMENT;
|
|
1919
|
+
var stride1 = vertices.length / accessorCount;
|
|
1920
|
+
for(var j = 0; j < accessorCount; j++){
|
|
1921
|
+
var offset = baseOffset + j * stride1;
|
|
1922
|
+
var position = new miniprogram$1.Vector3(vertices[offset], vertices[offset + 1], vertices[offset + 2]);
|
|
1923
|
+
elementNormalized && position.scale(scaleFactor);
|
|
1924
|
+
positions[j] = position;
|
|
1925
|
+
}
|
|
1926
|
+
}
|
|
1927
|
+
} else {
|
|
1928
|
+
var position1 = GLTFMeshParser._tempVector3;
|
|
1929
|
+
min.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
|
|
1930
|
+
max.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
|
|
1931
|
+
var baseOffset1 = elementOffset / vertices.BYTES_PER_ELEMENT;
|
|
1932
|
+
var stride2 = vertices.length / accessorCount;
|
|
1933
|
+
for(var j1 = 0; j1 < accessorCount; j1++){
|
|
1934
|
+
var offset1 = baseOffset1 + j1 * stride2;
|
|
1935
|
+
position1.copyFromArray(vertices, offset1);
|
|
1936
|
+
miniprogram$1.Vector3.min(min, position1, min);
|
|
1937
|
+
miniprogram$1.Vector3.max(max, position1, max);
|
|
1938
|
+
if (keepMeshData) {
|
|
1939
|
+
var clonePosition = position1.clone();
|
|
1940
|
+
elementNormalized && clonePosition.scale(scaleFactor);
|
|
1941
|
+
positions[j1] = clonePosition;
|
|
1942
|
+
}
|
|
1943
|
+
}
|
|
1944
|
+
}
|
|
1945
|
+
if (elementNormalized) {
|
|
1946
|
+
min.scale(scaleFactor);
|
|
1947
|
+
max.scale(scaleFactor);
|
|
1948
|
+
}
|
|
1949
|
+
} else if (attribute === "JOINTS_0" && keepMeshData) {
|
|
1950
|
+
var baseOffset2 = elementOffset / vertices.BYTES_PER_ELEMENT;
|
|
1951
|
+
var stride3 = vertices.length / accessorCount;
|
|
1952
|
+
for(var j2 = 0; j2 < accessorCount; j2++){
|
|
1953
|
+
var offset2 = baseOffset2 + j2 * stride3;
|
|
1954
|
+
var boneIndex = new miniprogram$1.Vector4(vertices[offset2], vertices[offset2 + 1], vertices[offset2 + 2], vertices[offset2 + 3]);
|
|
1955
|
+
elementNormalized && boneIndex.scale(scaleFactor);
|
|
1956
|
+
boneIndices[j2] = boneIndex;
|
|
1957
|
+
}
|
|
1958
|
+
} else if (attribute === "WEIGHTS_0" && keepMeshData) {
|
|
1959
|
+
var baseOffset3 = elementOffset / vertices.BYTES_PER_ELEMENT;
|
|
1960
|
+
var stride4 = vertices.length / accessorCount;
|
|
1961
|
+
for(var j3 = 0; j3 < accessorCount; j3++){
|
|
1962
|
+
var offset3 = baseOffset3 + j3 * stride4;
|
|
1963
|
+
var boneWeight = new miniprogram$1.Vector4(vertices[offset3], vertices[offset3 + 1], vertices[offset3 + 2], vertices[offset3 + 3]);
|
|
1964
|
+
elementNormalized && boneWeight.scale(scaleFactor);
|
|
1965
|
+
boneWeights[j3] = boneWeight;
|
|
1966
|
+
}
|
|
1967
|
+
}
|
|
1968
|
+
});
|
|
1969
|
+
promises.push(promise);
|
|
1970
|
+
};
|
|
1819
1971
|
var accessors = gltf.accessors;
|
|
1820
|
-
context.buffers;
|
|
1821
1972
|
var attributes = gltfPrimitive.attributes, targets = gltfPrimitive.targets, indices = gltfPrimitive.indices, mode = gltfPrimitive.mode;
|
|
1822
1973
|
var engine = mesh.engine;
|
|
1823
1974
|
var vertexElements = new Array();
|
|
@@ -1831,145 +1982,85 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
|
|
|
1831
1982
|
boneIndices = new Array(vertexCount);
|
|
1832
1983
|
boneWeights = new Array(vertexCount);
|
|
1833
1984
|
}
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
var elementOffset = void 0;
|
|
1848
|
-
if (accessorBuffer.interleaved) {
|
|
1849
|
-
var byteOffset = accessor.byteOffset || 0;
|
|
1850
|
-
var stride = accessorBuffer.stride;
|
|
1851
|
-
elementOffset = byteOffset % stride;
|
|
1852
|
-
if (vertexBindingInfos[meshId] === undefined) {
|
|
1853
|
-
vertexElement = new miniprogram.VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
|
|
1854
|
-
var vertexBuffer = accessorBuffer.vertexBuffer;
|
|
1855
|
-
if (!vertexBuffer) {
|
|
1856
|
-
vertexBuffer = new miniprogram.Buffer(engine, miniprogram.BufferBindFlag.VertexBuffer, vertices.byteLength, miniprogram.BufferUsage.Static);
|
|
1857
|
-
vertexBuffer.setData(vertices);
|
|
1858
|
-
accessorBuffer.vertexBuffer = vertexBuffer;
|
|
1859
|
-
meshRestoreInfo.vertexBuffers.push(new BufferRestoreInfo(vertexBuffer, accessorBuffer.restoreInfo));
|
|
1860
|
-
}
|
|
1861
|
-
mesh.setVertexBufferBinding(vertexBuffer, stride, bufferBindIndex);
|
|
1862
|
-
vertexBindingInfos[meshId] = bufferBindIndex++;
|
|
1863
|
-
} else {
|
|
1864
|
-
vertexElement = new miniprogram.VertexElement(attribute, elementOffset, elementFormat, vertexBindingInfos[meshId]);
|
|
1865
|
-
}
|
|
1985
|
+
var promises = new Array();
|
|
1986
|
+
for(var attribute in attributes)_loop(attribute);
|
|
1987
|
+
return Promise.all(promises).then(function() {
|
|
1988
|
+
mesh.setVertexElements(vertexElements);
|
|
1989
|
+
// Indices
|
|
1990
|
+
if (indices !== undefined) {
|
|
1991
|
+
var indexAccessor = gltf.accessors[indices];
|
|
1992
|
+
var promise = GLTFUtils.getAccessorBuffer(context, gltf.bufferViews, indexAccessor).then(function(accessorBuffer) {
|
|
1993
|
+
mesh.setIndices(accessorBuffer.data);
|
|
1994
|
+
mesh.addSubMesh(0, indexAccessor.count, mode);
|
|
1995
|
+
meshRestoreInfo.indexBuffer = accessorBuffer.restoreInfo;
|
|
1996
|
+
});
|
|
1997
|
+
promises.push(promise);
|
|
1866
1998
|
} else {
|
|
1867
|
-
|
|
1868
|
-
vertexElement = new miniprogram.VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
|
|
1869
|
-
var vertexBuffer1 = new miniprogram.Buffer(engine, miniprogram.BufferBindFlag.VertexBuffer, vertices.byteLength, miniprogram.BufferUsage.Static);
|
|
1870
|
-
vertexBuffer1.setData(vertices);
|
|
1871
|
-
meshRestoreInfo.vertexBuffers.push(new BufferRestoreInfo(vertexBuffer1, accessorBuffer.restoreInfo));
|
|
1872
|
-
mesh.setVertexBufferBinding(vertexBuffer1, accessorBuffer.stride, bufferBindIndex);
|
|
1873
|
-
vertexBindingInfos[meshId] = bufferBindIndex++;
|
|
1999
|
+
mesh.addSubMesh(0, vertexCount, mode);
|
|
1874
2000
|
}
|
|
1875
|
-
|
|
1876
|
-
if (
|
|
1877
|
-
|
|
1878
|
-
var _mesh_bounds = mesh.bounds, min = _mesh_bounds.min, max = _mesh_bounds.max;
|
|
1879
|
-
if (accessor.min && accessor.max) {
|
|
1880
|
-
min.copyFromArray(accessor.min);
|
|
1881
|
-
max.copyFromArray(accessor.max);
|
|
1882
|
-
if (keepMeshData) {
|
|
1883
|
-
var baseOffset = elementOffset / vertices.BYTES_PER_ELEMENT;
|
|
1884
|
-
var stride1 = vertices.length / accessorCount;
|
|
1885
|
-
for(var j = 0; j < accessorCount; j++){
|
|
1886
|
-
var offset = baseOffset + j * stride1;
|
|
1887
|
-
var position = new miniprogram$1.Vector3(vertices[offset], vertices[offset + 1], vertices[offset + 2]);
|
|
1888
|
-
elementNormalized && position.scale(scaleFactor);
|
|
1889
|
-
positions[j] = position;
|
|
1890
|
-
}
|
|
1891
|
-
}
|
|
1892
|
-
} else {
|
|
1893
|
-
var position1 = GLTFMeshParser._tempVector3;
|
|
1894
|
-
min.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
|
|
1895
|
-
max.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
|
|
1896
|
-
var baseOffset1 = elementOffset / vertices.BYTES_PER_ELEMENT;
|
|
1897
|
-
var stride2 = vertices.length / accessorCount;
|
|
1898
|
-
for(var j1 = 0; j1 < accessorCount; j1++){
|
|
1899
|
-
var offset1 = baseOffset1 + j1 * stride2;
|
|
1900
|
-
position1.copyFromArray(vertices, offset1);
|
|
1901
|
-
miniprogram$1.Vector3.min(min, position1, min);
|
|
1902
|
-
miniprogram$1.Vector3.max(max, position1, max);
|
|
1903
|
-
if (keepMeshData) {
|
|
1904
|
-
var clonePosition = position1.clone();
|
|
1905
|
-
elementNormalized && clonePosition.scale(scaleFactor);
|
|
1906
|
-
positions[j1] = clonePosition;
|
|
1907
|
-
}
|
|
1908
|
-
}
|
|
1909
|
-
}
|
|
1910
|
-
if (elementNormalized) {
|
|
1911
|
-
min.scale(scaleFactor);
|
|
1912
|
-
max.scale(scaleFactor);
|
|
1913
|
-
}
|
|
1914
|
-
} else if (attribute === "JOINTS_0" && keepMeshData) {
|
|
1915
|
-
var baseOffset2 = elementOffset / vertices.BYTES_PER_ELEMENT;
|
|
1916
|
-
var stride3 = vertices.length / accessorCount;
|
|
1917
|
-
for(var j2 = 0; j2 < accessorCount; j2++){
|
|
1918
|
-
var offset2 = baseOffset2 + j2 * stride3;
|
|
1919
|
-
var boneIndex = new miniprogram$1.Vector4(vertices[offset2], vertices[offset2 + 1], vertices[offset2 + 2], vertices[offset2 + 3]);
|
|
1920
|
-
elementNormalized && boneIndex.scale(scaleFactor);
|
|
1921
|
-
boneIndices[j2] = boneIndex;
|
|
1922
|
-
}
|
|
1923
|
-
} else if (attribute === "WEIGHTS_0" && keepMeshData) {
|
|
1924
|
-
var baseOffset3 = elementOffset / vertices.BYTES_PER_ELEMENT;
|
|
1925
|
-
var stride4 = vertices.length / accessorCount;
|
|
1926
|
-
for(var j3 = 0; j3 < accessorCount; j3++){
|
|
1927
|
-
var offset3 = baseOffset3 + j3 * stride4;
|
|
1928
|
-
var boneWeight = new miniprogram$1.Vector4(vertices[offset3], vertices[offset3 + 1], vertices[offset3 + 2], vertices[offset3 + 3]);
|
|
1929
|
-
elementNormalized && boneWeight.scale(scaleFactor);
|
|
1930
|
-
boneWeights[j3] = boneWeight;
|
|
1931
|
-
}
|
|
2001
|
+
// BlendShapes
|
|
2002
|
+
if (targets) {
|
|
2003
|
+
promises.push(GLTFMeshParser._createBlendShape(mesh, meshRestoreInfo, gltfMesh, accessors, targets, getBlendShapeData));
|
|
1932
2004
|
}
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
}
|
|
1945
|
-
// BlendShapes
|
|
1946
|
-
targets && GLTFMeshParser._createBlendShape(mesh, meshRestoreInfo, gltfMesh, targets, getBlendShapeData);
|
|
1947
|
-
mesh.uploadData(!keepMeshData);
|
|
1948
|
-
//@ts-ignore
|
|
1949
|
-
mesh._positions = positions;
|
|
1950
|
-
//@ts-ignore
|
|
1951
|
-
mesh._boneIndices = boneIndices;
|
|
1952
|
-
//@ts-ignore
|
|
1953
|
-
mesh._boneWeights = boneWeights;
|
|
1954
|
-
return Promise.resolve(mesh);
|
|
2005
|
+
return Promise.all(promises).then(function() {
|
|
2006
|
+
mesh.uploadData(!keepMeshData);
|
|
2007
|
+
//@ts-ignore
|
|
2008
|
+
mesh._positions = positions;
|
|
2009
|
+
//@ts-ignore
|
|
2010
|
+
mesh._boneIndices = boneIndices;
|
|
2011
|
+
//@ts-ignore
|
|
2012
|
+
mesh._boneWeights = boneWeights;
|
|
2013
|
+
return Promise.resolve(mesh);
|
|
2014
|
+
});
|
|
2015
|
+
});
|
|
1955
2016
|
};
|
|
1956
2017
|
/**
|
|
1957
2018
|
* @internal
|
|
1958
|
-
*/ GLTFMeshParser._createBlendShape = function _createBlendShape(mesh, meshRestoreInfo, glTFMesh, glTFTargets, getBlendShapeData) {
|
|
1959
|
-
var
|
|
1960
|
-
for(var i = 0, n = glTFTargets.length; i < n; i++){
|
|
2019
|
+
*/ GLTFMeshParser._createBlendShape = function _createBlendShape(mesh, meshRestoreInfo, glTFMesh, accessors, glTFTargets, getBlendShapeData) {
|
|
2020
|
+
var _loop = function(i, n) {
|
|
1961
2021
|
var name = blendShapeNames ? blendShapeNames[i] : "blendShape" + i;
|
|
1962
|
-
var
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
2022
|
+
var promise = Promise.all([
|
|
2023
|
+
getBlendShapeData("POSITION", i),
|
|
2024
|
+
getBlendShapeData("NORMAL", i),
|
|
2025
|
+
getBlendShapeData("TANGENT", i)
|
|
2026
|
+
]).then(function(infos) {
|
|
2027
|
+
var posBufferInfo = infos[0];
|
|
2028
|
+
var norBufferInfo = infos[1];
|
|
2029
|
+
var tanBufferInfo = infos[2];
|
|
2030
|
+
var target = glTFTargets[i];
|
|
2031
|
+
var posAccessor;
|
|
2032
|
+
var norAccessor;
|
|
2033
|
+
var tanAccessor;
|
|
2034
|
+
var positions = null;
|
|
2035
|
+
if (posBufferInfo) {
|
|
2036
|
+
posAccessor = accessors[target["POSITION"]];
|
|
2037
|
+
var _posAccessor_byteOffset;
|
|
2038
|
+
positions = GLTFUtils.bufferToVector3Array(posBufferInfo.data, posBufferInfo.stride, (_posAccessor_byteOffset = posAccessor.byteOffset) != null ? _posAccessor_byteOffset : 0, posAccessor.count);
|
|
2039
|
+
}
|
|
2040
|
+
var normals = null;
|
|
2041
|
+
if (norBufferInfo) {
|
|
2042
|
+
norAccessor = accessors[target["NORMAL"]];
|
|
2043
|
+
var _norAccessor_byteOffset;
|
|
2044
|
+
normals = GLTFUtils.bufferToVector3Array(norBufferInfo.data, norBufferInfo.stride, (_norAccessor_byteOffset = norAccessor.byteOffset) != null ? _norAccessor_byteOffset : 0, norAccessor.count);
|
|
2045
|
+
}
|
|
2046
|
+
var tangents = null;
|
|
2047
|
+
if (tanBufferInfo) {
|
|
2048
|
+
tanAccessor = accessors[target["NORMAL"]];
|
|
2049
|
+
var _tanAccessor_byteOffset;
|
|
2050
|
+
tangents = GLTFUtils.bufferToVector3Array(tanBufferInfo.data, tanBufferInfo.stride, (_tanAccessor_byteOffset = tanAccessor.byteOffset) != null ? _tanAccessor_byteOffset : 0, tanAccessor.count);
|
|
2051
|
+
}
|
|
2052
|
+
var blendShape = new miniprogram.BlendShape(name);
|
|
2053
|
+
blendShape.addFrame(1.0, positions, normals, tangents);
|
|
2054
|
+
mesh.addBlendShape(blendShape);
|
|
2055
|
+
var _posAccessor_byteOffset1, _norAccessor_byteOffset1, _tanAccessor_byteOffset1;
|
|
2056
|
+
meshRestoreInfo.blendShapes.push(new BlendShapeRestoreInfo(blendShape, new BlendShapeDataRestoreInfo(posBufferInfo.restoreInfo, posBufferInfo.stride, (_posAccessor_byteOffset1 = posAccessor.byteOffset) != null ? _posAccessor_byteOffset1 : 0, posAccessor.count), norBufferInfo ? new BlendShapeDataRestoreInfo(norBufferInfo.restoreInfo, norBufferInfo.stride, (_norAccessor_byteOffset1 = norAccessor.byteOffset) != null ? _norAccessor_byteOffset1 : 0, norAccessor.count) : null, tanBufferInfo ? new BlendShapeDataRestoreInfo(tanBufferInfo.restoreInfo, tanBufferInfo.stride, (_tanAccessor_byteOffset1 = tanAccessor.byteOffset) != null ? _tanAccessor_byteOffset1 : 0, tanAccessor.count) : null));
|
|
2057
|
+
});
|
|
2058
|
+
promises.push(promise);
|
|
2059
|
+
};
|
|
2060
|
+
var blendShapeNames = glTFMesh.extras ? glTFMesh.extras.targetNames : null;
|
|
2061
|
+
var promises = new Array();
|
|
2062
|
+
for(var i = 0, n = glTFTargets.length; i < n; i++)_loop(i);
|
|
2063
|
+
return Promise.all(promises);
|
|
1973
2064
|
};
|
|
1974
2065
|
return GLTFMeshParser;
|
|
1975
2066
|
}(GLTFParser);
|
|
@@ -2121,51 +2212,58 @@ var GLTFSkinParser = /*#__PURE__*/ function(GLTFParser) {
|
|
|
2121
2212
|
}
|
|
2122
2213
|
var _proto = GLTFSkinParser.prototype;
|
|
2123
2214
|
_proto.parse = function parse(context) {
|
|
2124
|
-
var
|
|
2125
|
-
var entities = glTFResource.entities;
|
|
2126
|
-
var gltfSkins = glTF.skins;
|
|
2127
|
-
if (!gltfSkins) return;
|
|
2128
|
-
var count = gltfSkins.length;
|
|
2129
|
-
var skins = new Array(count);
|
|
2130
|
-
for(var i = 0; i < count; i++){
|
|
2215
|
+
var _loop = function(i) {
|
|
2131
2216
|
var _gltfSkins_i = gltfSkins[i], inverseBindMatrices = _gltfSkins_i.inverseBindMatrices, skeleton = _gltfSkins_i.skeleton, joints = _gltfSkins_i.joints, _gltfSkins_i_name = _gltfSkins_i.name, name = _gltfSkins_i_name === void 0 ? "SKIN_" + i : _gltfSkins_i_name;
|
|
2132
2217
|
var jointCount = joints.length;
|
|
2133
2218
|
var skin = new miniprogram.Skin(name);
|
|
2134
2219
|
skin.inverseBindMatrices.length = jointCount;
|
|
2135
2220
|
// parse IBM
|
|
2136
2221
|
var accessor = glTF.accessors[inverseBindMatrices];
|
|
2137
|
-
var
|
|
2138
|
-
|
|
2139
|
-
var
|
|
2140
|
-
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2222
|
+
var promise = GLTFUtils.getAccessorBuffer(context, glTF.bufferViews, accessor).then(function(bufferInfo) {
|
|
2223
|
+
var buffer = bufferInfo.data;
|
|
2224
|
+
for(var i = 0; i < jointCount; i++){
|
|
2225
|
+
var inverseBindMatrix = new miniprogram$1.Matrix();
|
|
2226
|
+
inverseBindMatrix.copyFromArray(buffer, i * 16);
|
|
2227
|
+
skin.inverseBindMatrices[i] = inverseBindMatrix;
|
|
2228
|
+
// get joints
|
|
2229
|
+
for(var i1 = 0; i1 < jointCount; i1++){
|
|
2230
|
+
var jointIndex = joints[i1];
|
|
2231
|
+
var jointName = entities[jointIndex].name;
|
|
2232
|
+
skin.joints[i1] = jointName;
|
|
2233
|
+
// @todo Temporary solution, but it can alleviate the current BUG, and the skinning data mechanism of SkinnedMeshRenderer will be completely refactored in the future
|
|
2234
|
+
for(var j = entities.length - 1; j >= 0; j--){
|
|
2235
|
+
if (jointIndex !== j && entities[j].name === jointName) {
|
|
2236
|
+
entities[j].name = jointName + "_" + j;
|
|
2237
|
+
}
|
|
2238
|
+
}
|
|
2239
|
+
}
|
|
2240
|
+
// get skeleton
|
|
2241
|
+
if (skeleton !== undefined) {
|
|
2242
|
+
skin.skeleton = entities[skeleton].name;
|
|
2243
|
+
} else {
|
|
2244
|
+
var rootBone = _this._findSkeletonRootBone(joints, entities);
|
|
2245
|
+
if (rootBone) {
|
|
2246
|
+
skin.skeleton = rootBone.name;
|
|
2247
|
+
} else {
|
|
2248
|
+
throw "Failed to find skeleton root bone.";
|
|
2249
|
+
}
|
|
2152
2250
|
}
|
|
2153
2251
|
}
|
|
2154
|
-
|
|
2155
|
-
|
|
2156
|
-
|
|
2157
|
-
|
|
2158
|
-
|
|
2159
|
-
|
|
2160
|
-
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2252
|
+
return skin;
|
|
2253
|
+
});
|
|
2254
|
+
promises.push(promise);
|
|
2255
|
+
};
|
|
2256
|
+
var _this = this;
|
|
2257
|
+
var glTFResource = context.glTFResource, glTF = context.glTF;
|
|
2258
|
+
var entities = glTFResource.entities;
|
|
2259
|
+
var gltfSkins = glTF.skins;
|
|
2260
|
+
if (!gltfSkins) return;
|
|
2261
|
+
var count = gltfSkins.length;
|
|
2262
|
+
var promises = new Array();
|
|
2263
|
+
for(var i = 0; i < count; i++)_loop(i);
|
|
2264
|
+
return miniprogram.AssetPromise.all(promises).then(function(skins) {
|
|
2265
|
+
glTFResource.skins = skins;
|
|
2266
|
+
});
|
|
2169
2267
|
};
|
|
2170
2268
|
_proto._findSkeletonRootBone = function _findSkeletonRootBone(joints, entities) {
|
|
2171
2269
|
var paths = {};
|
|
@@ -2206,13 +2304,14 @@ var GLTFTextureParser = /*#__PURE__*/ function(GLTFParser) {
|
|
|
2206
2304
|
var _proto = GLTFTextureParser.prototype;
|
|
2207
2305
|
_proto.parse = function parse(context) {
|
|
2208
2306
|
var _this = this;
|
|
2209
|
-
var glTFResource = context.glTFResource, glTF = context.glTF
|
|
2307
|
+
var glTFResource = context.glTFResource, glTF = context.glTF;
|
|
2210
2308
|
var engine = glTFResource.engine, url = glTFResource.url;
|
|
2211
2309
|
if (glTF.textures) {
|
|
2212
2310
|
var texturesPromiseInfo = context.texturesPromiseInfo;
|
|
2213
2311
|
miniprogram.AssetPromise.all(glTF.textures.map(function(param, index) {
|
|
2214
2312
|
var sampler = param.sampler, _param_source = param.source, source = _param_source === void 0 ? 0 : _param_source, textureName = param.name;
|
|
2215
2313
|
var _glTF_images_source = glTF.images[source], uri = _glTF_images_source.uri, bufferViewIndex = _glTF_images_source.bufferView, mimeType = _glTF_images_source.mimeType, imageName = _glTF_images_source.name;
|
|
2314
|
+
var samplerInfo = sampler !== undefined && _this._getSamplerInfo(glTF.samplers[sampler]);
|
|
2216
2315
|
if (uri) {
|
|
2217
2316
|
// TODO: support ktx extension https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_texture_basisu/README.md
|
|
2218
2317
|
var index1 = uri.lastIndexOf(".");
|
|
@@ -2220,31 +2319,36 @@ var GLTFTextureParser = /*#__PURE__*/ function(GLTFParser) {
|
|
|
2220
2319
|
var type = ext.startsWith("ktx") ? miniprogram.AssetType.KTX : miniprogram.AssetType.Texture2D;
|
|
2221
2320
|
return engine.resourceManager.load({
|
|
2222
2321
|
url: miniprogram.Utils.resolveAbsoluteUrl(url, uri),
|
|
2223
|
-
type: type
|
|
2322
|
+
type: type,
|
|
2323
|
+
params: {
|
|
2324
|
+
mipmap: samplerInfo == null ? void 0 : samplerInfo.mipmap
|
|
2325
|
+
}
|
|
2224
2326
|
}).then(function(texture) {
|
|
2225
2327
|
if (!texture.name) {
|
|
2226
2328
|
texture.name = textureName || imageName || "texture_" + index1;
|
|
2227
2329
|
}
|
|
2228
2330
|
if (sampler !== undefined) {
|
|
2229
|
-
_this._parseSampler(texture,
|
|
2331
|
+
_this._parseSampler(texture, samplerInfo);
|
|
2230
2332
|
}
|
|
2231
2333
|
return texture;
|
|
2232
2334
|
});
|
|
2233
2335
|
} else {
|
|
2234
2336
|
var bufferView = glTF.bufferViews[bufferViewIndex];
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2337
|
+
return context.getBuffers().then(function(buffers) {
|
|
2338
|
+
var buffer = buffers[bufferView.buffer];
|
|
2339
|
+
var imageBuffer = new Uint8Array(buffer, bufferView.byteOffset, bufferView.byteLength);
|
|
2340
|
+
return GLTFUtils.loadImageBuffer(imageBuffer, mimeType).then(function(image) {
|
|
2341
|
+
var texture = new miniprogram.Texture2D(engine, image.width, image.height, undefined, samplerInfo == null ? void 0 : samplerInfo.mipmap);
|
|
2342
|
+
texture.setImageSource(image);
|
|
2343
|
+
texture.generateMipmaps();
|
|
2344
|
+
texture.name = textureName || imageName || "texture_" + index;
|
|
2345
|
+
if (sampler !== undefined) {
|
|
2346
|
+
_this._parseSampler(texture, samplerInfo);
|
|
2347
|
+
}
|
|
2348
|
+
var bufferTextureRestoreInfo = new BufferTextureRestoreInfo(texture, bufferView, mimeType);
|
|
2349
|
+
context.contentRestorer.bufferTextures.push(bufferTextureRestoreInfo);
|
|
2350
|
+
return texture;
|
|
2351
|
+
});
|
|
2248
2352
|
});
|
|
2249
2353
|
}
|
|
2250
2354
|
})).then(function(textures) {
|
|
@@ -2254,22 +2358,39 @@ var GLTFTextureParser = /*#__PURE__*/ function(GLTFParser) {
|
|
|
2254
2358
|
return texturesPromiseInfo.promise;
|
|
2255
2359
|
}
|
|
2256
2360
|
};
|
|
2257
|
-
_proto.
|
|
2258
|
-
var
|
|
2259
|
-
|
|
2361
|
+
_proto._getSamplerInfo = function _getSamplerInfo(sampler) {
|
|
2362
|
+
var minFilter = sampler.minFilter, magFilter = sampler.magFilter, wrapS = sampler.wrapS, wrapT = sampler.wrapT;
|
|
2363
|
+
var info = {};
|
|
2364
|
+
if (minFilter || magFilter) {
|
|
2365
|
+
info.mipmap = minFilter >= TextureMinFilter.NEAREST_MIPMAP_NEAREST;
|
|
2260
2366
|
if (magFilter === TextureMagFilter.NEAREST) {
|
|
2261
|
-
|
|
2262
|
-
} else if (minFilter <= TextureMinFilter.LINEAR_MIPMAP_NEAREST) {
|
|
2263
|
-
texture.filterMode = miniprogram.TextureFilterMode.Bilinear;
|
|
2367
|
+
info.filterMode = miniprogram.TextureFilterMode.Point;
|
|
2264
2368
|
} else {
|
|
2265
|
-
|
|
2369
|
+
if (minFilter <= TextureMinFilter.LINEAR_MIPMAP_NEAREST) {
|
|
2370
|
+
info.filterMode = miniprogram.TextureFilterMode.Bilinear;
|
|
2371
|
+
} else {
|
|
2372
|
+
info.filterMode = miniprogram.TextureFilterMode.Trilinear;
|
|
2373
|
+
}
|
|
2266
2374
|
}
|
|
2267
2375
|
}
|
|
2268
2376
|
if (wrapS) {
|
|
2269
|
-
|
|
2377
|
+
info.wrapModeU = GLTFTextureParser._wrapMap[wrapS];
|
|
2270
2378
|
}
|
|
2271
2379
|
if (wrapT) {
|
|
2272
|
-
|
|
2380
|
+
info.wrapModeV = GLTFTextureParser._wrapMap[wrapT];
|
|
2381
|
+
}
|
|
2382
|
+
return info;
|
|
2383
|
+
};
|
|
2384
|
+
_proto._parseSampler = function _parseSampler(texture, samplerInfo) {
|
|
2385
|
+
var filterMode = samplerInfo.filterMode, wrapModeU = samplerInfo.wrapModeU, wrapModeV = samplerInfo.wrapModeV;
|
|
2386
|
+
if (filterMode !== undefined) {
|
|
2387
|
+
texture.filterMode = filterMode;
|
|
2388
|
+
}
|
|
2389
|
+
if (wrapModeU !== undefined) {
|
|
2390
|
+
texture.wrapModeU = wrapModeU;
|
|
2391
|
+
}
|
|
2392
|
+
if (wrapModeV !== undefined) {
|
|
2393
|
+
texture.wrapModeV = wrapModeV;
|
|
2273
2394
|
}
|
|
2274
2395
|
};
|
|
2275
2396
|
return GLTFTextureParser;
|
|
@@ -2367,33 +2488,16 @@ var GLTFValidator = /*#__PURE__*/ function(GLTFParser1) {
|
|
|
2367
2488
|
|
|
2368
2489
|
/**
|
|
2369
2490
|
* Product after glTF parser, usually, `defaultSceneRoot` is only needed to use.
|
|
2370
|
-
*/ var GLTFResource = /*#__PURE__*/ function(
|
|
2371
|
-
_inherits(GLTFResource,
|
|
2491
|
+
*/ var GLTFResource = /*#__PURE__*/ function(ReferResource) {
|
|
2492
|
+
_inherits(GLTFResource, ReferResource);
|
|
2372
2493
|
function GLTFResource(engine, url) {
|
|
2373
2494
|
var _this;
|
|
2374
|
-
_this =
|
|
2495
|
+
_this = ReferResource.call(this, engine) || this;
|
|
2375
2496
|
_this.url = url;
|
|
2376
2497
|
return _this;
|
|
2377
2498
|
}
|
|
2378
|
-
var _proto = GLTFResource.prototype;
|
|
2379
|
-
/**
|
|
2380
|
-
* @internal
|
|
2381
|
-
*/ _proto._onDestroy = function _onDestroy() {
|
|
2382
|
-
EngineObject.prototype._onDestroy.call(this);
|
|
2383
|
-
this.defaultSceneRoot.destroy();
|
|
2384
|
-
this.textures = null;
|
|
2385
|
-
this.materials = null;
|
|
2386
|
-
this.meshes = null;
|
|
2387
|
-
this.skins = null;
|
|
2388
|
-
this.animations = null;
|
|
2389
|
-
this.entities = null;
|
|
2390
|
-
this.cameras = null;
|
|
2391
|
-
this.lights = null;
|
|
2392
|
-
this.sceneRoots = null;
|
|
2393
|
-
this.extensionsData = null;
|
|
2394
|
-
};
|
|
2395
2499
|
return GLTFResource;
|
|
2396
|
-
}(miniprogram.
|
|
2500
|
+
}(miniprogram.ReferResource);
|
|
2397
2501
|
|
|
2398
2502
|
var GLTFLoader = /*#__PURE__*/ function(Loader) {
|
|
2399
2503
|
_inherits(GLTFLoader, Loader);
|
|
@@ -2423,8 +2527,14 @@ var GLTFLoader = /*#__PURE__*/ function(Loader) {
|
|
|
2423
2527
|
resourceManager.addContentRestorer(restorer);
|
|
2424
2528
|
masterPromiseInfo.resolve(glTFResource);
|
|
2425
2529
|
}).catch(function(e) {
|
|
2426
|
-
|
|
2427
|
-
|
|
2530
|
+
var msg = "Error loading glTF model from " + url + " : " + e;
|
|
2531
|
+
miniprogram.Logger.error(msg);
|
|
2532
|
+
masterPromiseInfo.reject(msg);
|
|
2533
|
+
context.defaultSceneRootPromiseInfo.reject(e);
|
|
2534
|
+
context.texturesPromiseInfo.reject(e);
|
|
2535
|
+
context.materialsPromiseInfo.reject(e);
|
|
2536
|
+
context.meshesPromiseInfo.reject(e);
|
|
2537
|
+
context.animationClipsPromiseInfo.reject(e);
|
|
2428
2538
|
});
|
|
2429
2539
|
return context.promiseMap;
|
|
2430
2540
|
};
|
|
@@ -3026,6 +3136,15 @@ KTXLoader = __decorate([
|
|
|
3026
3136
|
])
|
|
3027
3137
|
], KTXLoader);
|
|
3028
3138
|
|
|
3139
|
+
function parseProperty(object, key, value) {
|
|
3140
|
+
if (typeof value === "object") {
|
|
3141
|
+
for(var subKey in value){
|
|
3142
|
+
parseProperty(object[key], subKey, value[subKey]);
|
|
3143
|
+
}
|
|
3144
|
+
} else {
|
|
3145
|
+
object[key] = value;
|
|
3146
|
+
}
|
|
3147
|
+
}
|
|
3029
3148
|
var MaterialLoader = /*#__PURE__*/ function(Loader) {
|
|
3030
3149
|
_inherits(MaterialLoader, Loader);
|
|
3031
3150
|
function MaterialLoader() {
|
|
@@ -3037,7 +3156,7 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
|
|
|
3037
3156
|
return new miniprogram.AssetPromise(function(resolve, reject) {
|
|
3038
3157
|
_this.request(item.url, _extends({}, item, {
|
|
3039
3158
|
type: "json"
|
|
3040
|
-
})).then(function(
|
|
3159
|
+
})).then(function(materialSchema) {
|
|
3041
3160
|
var _loop = function(key) {
|
|
3042
3161
|
var _shaderData_key = shaderData[key], type = _shaderData_key.type, value = _shaderData_key.value;
|
|
3043
3162
|
switch(type){
|
|
@@ -3065,27 +3184,8 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
|
|
|
3065
3184
|
}
|
|
3066
3185
|
};
|
|
3067
3186
|
var engine = resourceManager.engine;
|
|
3068
|
-
var name =
|
|
3069
|
-
var material;
|
|
3070
|
-
switch(shader){
|
|
3071
|
-
case "pbr":
|
|
3072
|
-
material = new miniprogram.PBRMaterial(engine);
|
|
3073
|
-
break;
|
|
3074
|
-
case "pbr-specular":
|
|
3075
|
-
material = new miniprogram.PBRSpecularMaterial(engine);
|
|
3076
|
-
break;
|
|
3077
|
-
case "unlit":
|
|
3078
|
-
material = new miniprogram.UnlitMaterial(engine);
|
|
3079
|
-
break;
|
|
3080
|
-
case "blinn-phong":
|
|
3081
|
-
material = new miniprogram.BlinnPhongMaterial(engine);
|
|
3082
|
-
break;
|
|
3083
|
-
case "bake-pbr":
|
|
3084
|
-
// @todo refactor custom shader later
|
|
3085
|
-
// @ts-ignore
|
|
3086
|
-
material = new miniprogram.PBRBaseMaterial(engine, miniprogram.Shader.find("bake-pbr"));
|
|
3087
|
-
break;
|
|
3088
|
-
}
|
|
3187
|
+
var name = materialSchema.name, shader = materialSchema.shader, shaderData = materialSchema.shaderData, macros = materialSchema.macros, renderState = materialSchema.renderState;
|
|
3188
|
+
var material = new miniprogram.Material(engine, miniprogram.Shader.find(shader));
|
|
3089
3189
|
material.name = name;
|
|
3090
3190
|
var texturePromises = new Array();
|
|
3091
3191
|
var materialShaderData = material.shaderData;
|
|
@@ -3098,9 +3198,7 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
|
|
|
3098
3198
|
materialShaderData.enableMacro(name1, value);
|
|
3099
3199
|
}
|
|
3100
3200
|
}
|
|
3101
|
-
|
|
3102
|
-
material[key1] = renderState[key1];
|
|
3103
|
-
}
|
|
3201
|
+
parseProperty(material, "renderState", renderState);
|
|
3104
3202
|
return Promise.all(texturePromises).then(function() {
|
|
3105
3203
|
resolve(material);
|
|
3106
3204
|
});
|
|
@@ -3855,6 +3953,12 @@ exports.AnimationClipDecoder = __decorate([
|
|
|
3855
3953
|
decoder("AnimationClip")
|
|
3856
3954
|
], exports.AnimationClipDecoder);
|
|
3857
3955
|
|
|
3956
|
+
exports.SpecularMode = void 0;
|
|
3957
|
+
(function(SpecularMode) {
|
|
3958
|
+
SpecularMode["Sky"] = "Sky";
|
|
3959
|
+
SpecularMode["Custom"] = "Custom";
|
|
3960
|
+
})(exports.SpecularMode || (exports.SpecularMode = {}));
|
|
3961
|
+
|
|
3858
3962
|
var SceneParserContext = /*#__PURE__*/ function() {
|
|
3859
3963
|
function SceneParserContext(originalData, scene) {
|
|
3860
3964
|
this.originalData = originalData;
|
|
@@ -3982,7 +4086,7 @@ exports.MeshLoader = /*#__PURE__*/ function(Loader) {
|
|
|
3982
4086
|
decode(data, resourceManager.engine).then(function(mesh) {
|
|
3983
4087
|
resolve(mesh);
|
|
3984
4088
|
});
|
|
3985
|
-
});
|
|
4089
|
+
}).catch(reject);
|
|
3986
4090
|
});
|
|
3987
4091
|
};
|
|
3988
4092
|
return MeshLoader;
|
|
@@ -4001,14 +4105,14 @@ exports.EditorTextureLoader = /*#__PURE__*/ function(Loader) {
|
|
|
4001
4105
|
var _proto = EditorTextureLoader.prototype;
|
|
4002
4106
|
_proto.load = function load(item, resourceManager) {
|
|
4003
4107
|
var _this = this;
|
|
4004
|
-
return new miniprogram.AssetPromise(function(resolve) {
|
|
4108
|
+
return new miniprogram.AssetPromise(function(resolve, reject) {
|
|
4005
4109
|
_this.request(item.url, {
|
|
4006
4110
|
type: "arraybuffer"
|
|
4007
4111
|
}).then(function(data) {
|
|
4008
4112
|
decode(data, resourceManager.engine).then(function(texture) {
|
|
4009
4113
|
resolve(texture);
|
|
4010
4114
|
});
|
|
4011
|
-
});
|
|
4115
|
+
}).catch(reject);
|
|
4012
4116
|
});
|
|
4013
4117
|
};
|
|
4014
4118
|
return EditorTextureLoader;
|
|
@@ -4385,7 +4489,7 @@ var AnimationClipLoader = /*#__PURE__*/ function(Loader) {
|
|
|
4385
4489
|
_this.request(item.url, _extends({}, item, {
|
|
4386
4490
|
type: "arraybuffer"
|
|
4387
4491
|
})).then(function(data) {
|
|
4388
|
-
return decode(data, resourceManager.engine);
|
|
4492
|
+
return decode(data, resourceManager.engine).then(resolve);
|
|
4389
4493
|
}).catch(reject);
|
|
4390
4494
|
});
|
|
4391
4495
|
};
|
|
@@ -4413,16 +4517,32 @@ var SceneLoader = /*#__PURE__*/ function(Loader) {
|
|
|
4413
4517
|
// @ts-ignore
|
|
4414
4518
|
engine.resourceManager.initVirtualResources(data.files);
|
|
4415
4519
|
return SceneParser.parse(engine, data).then(function(scene) {
|
|
4520
|
+
var promises = [];
|
|
4416
4521
|
// parse ambient light
|
|
4417
4522
|
var ambient = data.scene.ambient;
|
|
4418
|
-
var
|
|
4419
|
-
if (ambient.
|
|
4420
|
-
|
|
4421
|
-
|
|
4422
|
-
|
|
4523
|
+
var useCustomAmbient = ambient.specularMode === "Custom";
|
|
4524
|
+
if (useCustomAmbient && ambient.customAmbientLight) {
|
|
4525
|
+
// @ts-ignore
|
|
4526
|
+
// prettier-ignore
|
|
4527
|
+
var customAmbientPromise = resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
|
|
4528
|
+
scene.ambientLight = ambientLight;
|
|
4529
|
+
scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
|
|
4530
|
+
scene.ambientLight.specularIntensity = ambient.specularIntensity;
|
|
4531
|
+
scene.ambientLight.diffuseMode = ambient.diffuseMode;
|
|
4532
|
+
scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
|
|
4533
|
+
});
|
|
4534
|
+
promises.push(customAmbientPromise);
|
|
4535
|
+
} else if (!useCustomAmbient && ambient.ambientLight) {
|
|
4536
|
+
// @ts-ignore
|
|
4537
|
+
// prettier-ignore
|
|
4538
|
+
var ambientLightPromise = resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
|
|
4539
|
+
scene.ambientLight = ambientLight;
|
|
4423
4540
|
scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
|
|
4424
4541
|
scene.ambientLight.specularIntensity = ambient.specularIntensity;
|
|
4542
|
+
scene.ambientLight.diffuseMode = ambient.diffuseMode;
|
|
4543
|
+
scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
|
|
4425
4544
|
});
|
|
4545
|
+
promises.push(ambientLightPromise);
|
|
4426
4546
|
} else {
|
|
4427
4547
|
scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
|
|
4428
4548
|
scene.ambientLight.specularIntensity = ambient.specularIntensity;
|
|
@@ -4430,30 +4550,34 @@ var SceneLoader = /*#__PURE__*/ function(Loader) {
|
|
|
4430
4550
|
}
|
|
4431
4551
|
var background = data.scene.background;
|
|
4432
4552
|
scene.background.mode = background.mode;
|
|
4433
|
-
var backgroundPromise = Promise.resolve();
|
|
4434
4553
|
switch(scene.background.mode){
|
|
4435
4554
|
case miniprogram.BackgroundMode.SolidColor:
|
|
4436
4555
|
scene.background.solidColor.copyFrom(background.color);
|
|
4437
4556
|
break;
|
|
4438
4557
|
case miniprogram.BackgroundMode.Sky:
|
|
4439
|
-
if (background.
|
|
4558
|
+
if (background.skyMesh && background.skyMaterial) {
|
|
4559
|
+
// @ts-ignore
|
|
4560
|
+
var skyMeshPromise = resourceManager.getResourceByRef(background.skyMesh).then(function(mesh) {
|
|
4561
|
+
scene.background.sky.mesh = mesh;
|
|
4562
|
+
});
|
|
4440
4563
|
// @ts-ignore
|
|
4441
|
-
|
|
4442
|
-
|
|
4443
|
-
|
|
4444
|
-
skyMaterial.texture = light.specularTexture;
|
|
4445
|
-
skyMaterial.textureDecodeRGBM = true;
|
|
4446
|
-
sky.material = skyMaterial;
|
|
4447
|
-
sky.mesh = miniprogram.PrimitiveMesh.createCuboid(engine, 1, 1, 1);
|
|
4564
|
+
// prettier-ignore
|
|
4565
|
+
var skyMaterialPromise = resourceManager.getResourceByRef(background.skyMaterial).then(function(material) {
|
|
4566
|
+
scene.background.sky.material = material;
|
|
4448
4567
|
});
|
|
4568
|
+
promises.push(skyMeshPromise, skyMaterialPromise);
|
|
4569
|
+
} else {
|
|
4570
|
+
miniprogram.Logger.warn("Sky background mode requires skyMesh and skyMaterial");
|
|
4449
4571
|
}
|
|
4450
4572
|
break;
|
|
4451
4573
|
case miniprogram.BackgroundMode.Texture:
|
|
4452
4574
|
if (background.texture) {
|
|
4453
4575
|
// @ts-ignore
|
|
4454
|
-
|
|
4576
|
+
// prettier-ignore
|
|
4577
|
+
var backgroundPromise = resourceManager.getResourceByRef(background.texture).then(function(texture) {
|
|
4455
4578
|
scene.background.texture = texture;
|
|
4456
4579
|
});
|
|
4580
|
+
promises.push(backgroundPromise);
|
|
4457
4581
|
}
|
|
4458
4582
|
break;
|
|
4459
4583
|
}
|
|
@@ -4465,10 +4589,7 @@ var SceneLoader = /*#__PURE__*/ function(Loader) {
|
|
|
4465
4589
|
if (shadow.shadowDistance != undefined) scene.shadowDistance = shadow.shadowDistance;
|
|
4466
4590
|
if (shadow.shadowCascades != undefined) scene.shadowCascades = shadow.shadowCascades;
|
|
4467
4591
|
}
|
|
4468
|
-
return Promise.all(
|
|
4469
|
-
ambientLightPromise,
|
|
4470
|
-
backgroundPromise
|
|
4471
|
-
]).then(function() {
|
|
4592
|
+
return Promise.all(promises).then(function() {
|
|
4472
4593
|
resolve(scene);
|
|
4473
4594
|
});
|
|
4474
4595
|
});
|
|
@@ -4511,7 +4632,7 @@ var KHR_draco_mesh_compression = (_KHR_draco_mesh_compression = /*#__PURE__*/ fu
|
|
|
4511
4632
|
};
|
|
4512
4633
|
_proto.createAndParse = function createAndParse(context, schema, glTFPrimitive, glTFMesh) {
|
|
4513
4634
|
var _this = this;
|
|
4514
|
-
var glTF = context.glTF,
|
|
4635
|
+
var glTF = context.glTF, engine = context.glTFResource.engine;
|
|
4515
4636
|
var bufferViews = glTF.bufferViews, accessors = glTF.accessors;
|
|
4516
4637
|
var bufferViewIndex = schema.bufferView, gltfAttributeMap = schema.attributes;
|
|
4517
4638
|
var attributeMap = {};
|
|
@@ -4533,21 +4654,23 @@ var KHR_draco_mesh_compression = (_KHR_draco_mesh_compression = /*#__PURE__*/ fu
|
|
|
4533
4654
|
useUniqueIDs: true,
|
|
4534
4655
|
indexType: indexType
|
|
4535
4656
|
};
|
|
4536
|
-
|
|
4537
|
-
|
|
4538
|
-
|
|
4539
|
-
|
|
4540
|
-
|
|
4541
|
-
|
|
4542
|
-
|
|
4657
|
+
return context.getBuffers().then(function(buffers) {
|
|
4658
|
+
var buffer = GLTFUtils.getBufferViewData(bufferViews[bufferViewIndex], buffers);
|
|
4659
|
+
return KHR_draco_mesh_compression._decoder.decode(buffer, taskConfig).then(function(decodedGeometry) {
|
|
4660
|
+
var mesh = new miniprogram.ModelMesh(engine, glTFMesh.name);
|
|
4661
|
+
return _this._parseMeshFromGLTFPrimitiveDraco(mesh, glTFMesh, glTFPrimitive, glTF, function(attributeSemantic) {
|
|
4662
|
+
for(var j = 0; j < decodedGeometry.attributes.length; j++){
|
|
4663
|
+
if (decodedGeometry.attributes[j].name === attributeSemantic) {
|
|
4664
|
+
return decodedGeometry.attributes[j].array;
|
|
4665
|
+
}
|
|
4543
4666
|
}
|
|
4544
|
-
|
|
4545
|
-
|
|
4546
|
-
|
|
4547
|
-
|
|
4548
|
-
|
|
4549
|
-
|
|
4550
|
-
}
|
|
4667
|
+
return null;
|
|
4668
|
+
}, function(attributeSemantic, shapeIndex) {
|
|
4669
|
+
throw "BlendShape animation is not supported when using draco.";
|
|
4670
|
+
}, function() {
|
|
4671
|
+
return decodedGeometry.index.array;
|
|
4672
|
+
}, context.keepMeshData);
|
|
4673
|
+
});
|
|
4551
4674
|
});
|
|
4552
4675
|
};
|
|
4553
4676
|
_proto._parseMeshFromGLTFPrimitiveDraco = function _parseMeshFromGLTFPrimitiveDraco(mesh, gltfMesh, gltfPrimitive, gltf, getVertexBufferData, getBlendShapeData, getIndexBufferData, keepMeshData) {
|
|
@@ -4646,7 +4769,7 @@ var KHR_draco_mesh_compression = (_KHR_draco_mesh_compression = /*#__PURE__*/ fu
|
|
|
4646
4769
|
mesh.addSubMesh(0, vertexCount, mode);
|
|
4647
4770
|
}
|
|
4648
4771
|
// BlendShapes
|
|
4649
|
-
targets && GLTFMeshParser._createBlendShape(mesh, null, gltfMesh, targets, getBlendShapeData);
|
|
4772
|
+
targets && GLTFMeshParser._createBlendShape(mesh, null, gltfMesh, accessors, targets, getBlendShapeData);
|
|
4650
4773
|
mesh.uploadData(!keepMeshData);
|
|
4651
4774
|
return Promise.resolve(mesh);
|
|
4652
4775
|
};
|