@galacean/engine-loader 0.9.0 → 0.9.2

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.
@@ -1808,21 +1808,31 @@ var MeshParser = /*#__PURE__*/ function(Parser1) {
1808
1808
  var vertexCount;
1809
1809
  var bufferBindIndex = 0;
1810
1810
  var positions;
1811
- keepMeshData && (positions = new Array(vertexCount));
1811
+ var boneIndices;
1812
+ var boneWeights;
1813
+ if (keepMeshData) {
1814
+ positions = new Array(vertexCount);
1815
+ boneIndices = new Array(vertexCount);
1816
+ boneWeights = new Array(vertexCount);
1817
+ }
1812
1818
  for(var attribute in attributes){
1813
1819
  var accessor = accessors[attributes[attribute]];
1814
1820
  var accessorBuffer = GLTFUtil.getAccessorBuffer(context, gltf, accessor);
1815
- var dataElmentSize = GLTFUtil.getAccessorTypeSize(accessor.type);
1816
- var attributeCount = accessor.count;
1821
+ var dataElementSize = GLTFUtil.getAccessorTypeSize(accessor.type);
1822
+ var accessorCount = accessor.count;
1817
1823
  var vertices = accessorBuffer.data;
1818
1824
  var vertexElement = void 0;
1819
1825
  var meshId = mesh.instanceId;
1820
1826
  var vertexBindingInfos = accessorBuffer.vertexBindingInfos;
1821
- var elementFormat = GLTFUtil.getElementFormat(accessor.componentType, dataElmentSize, accessor.normalized);
1827
+ var elementNormalized = accessor.normalized;
1828
+ var elementFormat = GLTFUtil.getElementFormat(accessor.componentType, dataElementSize, elementNormalized);
1829
+ var scaleFactor = void 0;
1830
+ elementNormalized && (scaleFactor = GLTFUtil.getNormalizedComponentScale(accessor.componentType));
1831
+ var elementOffset = void 0;
1822
1832
  if (accessorBuffer.interleaved) {
1823
1833
  var byteOffset = accessor.byteOffset || 0;
1824
1834
  var stride = accessorBuffer.stride;
1825
- var elementOffset = byteOffset % stride;
1835
+ elementOffset = byteOffset % stride;
1826
1836
  if (vertexBindingInfos[meshId] === undefined) {
1827
1837
  vertexElement = new miniprogram.VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
1828
1838
  var vertexBuffer = accessorBuffer.vertexBuffer;
@@ -1837,7 +1847,8 @@ var MeshParser = /*#__PURE__*/ function(Parser1) {
1837
1847
  vertexElement = new miniprogram.VertexElement(attribute, elementOffset, elementFormat, vertexBindingInfos[meshId]);
1838
1848
  }
1839
1849
  } else {
1840
- vertexElement = new miniprogram.VertexElement(attribute, 0, elementFormat, bufferBindIndex);
1850
+ elementOffset = 0;
1851
+ vertexElement = new miniprogram.VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
1841
1852
  var vertexBuffer1 = new miniprogram.Buffer(engine, miniprogram.BufferBindFlag.VertexBuffer, vertices.byteLength, miniprogram.BufferUsage.Static);
1842
1853
  vertexBuffer1.setData(vertices);
1843
1854
  mesh.setVertexBufferBinding(vertexBuffer1, accessorBuffer.stride, bufferBindIndex);
@@ -1845,35 +1856,60 @@ var MeshParser = /*#__PURE__*/ function(Parser1) {
1845
1856
  }
1846
1857
  vertexElements.push(vertexElement);
1847
1858
  if (attribute === "POSITION") {
1848
- vertexCount = attributeCount;
1859
+ vertexCount = accessorCount;
1849
1860
  var _mesh_bounds = mesh.bounds, min = _mesh_bounds.min, max = _mesh_bounds.max;
1850
1861
  if (accessor.min && accessor.max) {
1851
1862
  min.copyFromArray(accessor.min);
1852
1863
  max.copyFromArray(accessor.max);
1853
1864
  if (keepMeshData) {
1854
- var stride1 = vertices.length / attributeCount;
1855
- for(var j = 0; j < attributeCount; j++){
1856
- var offset = j * stride1;
1857
- positions[j] = new miniprogram$1.Vector3(vertices[offset], vertices[offset + 1], vertices[offset + 2]);
1865
+ var baseOffset = elementOffset / vertices.BYTES_PER_ELEMENT;
1866
+ var stride1 = vertices.length / accessorCount;
1867
+ for(var j = 0; j < accessorCount; j++){
1868
+ var offset = baseOffset + j * stride1;
1869
+ var position = new miniprogram$1.Vector3(vertices[offset], vertices[offset + 1], vertices[offset + 2]);
1870
+ elementNormalized && position.scale(scaleFactor);
1871
+ positions[j] = position;
1858
1872
  }
1859
1873
  }
1860
1874
  } else {
1861
- var position = MeshParser._tempVector3;
1875
+ var position1 = MeshParser._tempVector3;
1862
1876
  min.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
1863
1877
  max.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
1864
- var stride2 = vertices.length / attributeCount;
1865
- for(var j1 = 0; j1 < attributeCount; j1++){
1866
- var offset1 = j1 * stride2;
1867
- position.copyFromArray(vertices, offset1);
1868
- miniprogram$1.Vector3.min(min, position, min);
1869
- miniprogram$1.Vector3.max(max, position, max);
1870
- keepMeshData && (positions[j1] = position.clone());
1878
+ var baseOffset1 = elementOffset / vertices.BYTES_PER_ELEMENT;
1879
+ var stride2 = vertices.length / accessorCount;
1880
+ for(var j1 = 0; j1 < accessorCount; j1++){
1881
+ var offset1 = baseOffset1 + j1 * stride2;
1882
+ position1.copyFromArray(vertices, offset1);
1883
+ miniprogram$1.Vector3.min(min, position1, min);
1884
+ miniprogram$1.Vector3.max(max, position1, max);
1885
+ if (keepMeshData) {
1886
+ var clonePosition = position1.clone();
1887
+ elementNormalized && clonePosition.scale(scaleFactor);
1888
+ positions[j1] = clonePosition;
1889
+ }
1871
1890
  }
1872
1891
  }
1873
- if (accessor.normalized) {
1874
- var sacleFactor = GLTFUtil.getNormalizedComponentScale(accessor.componentType);
1875
- min.scale(sacleFactor);
1876
- max.scale(sacleFactor);
1892
+ if (elementNormalized) {
1893
+ min.scale(scaleFactor);
1894
+ max.scale(scaleFactor);
1895
+ }
1896
+ } else if (attribute === "JOINTS_0" && keepMeshData) {
1897
+ var baseOffset2 = elementOffset / vertices.BYTES_PER_ELEMENT;
1898
+ var stride3 = vertices.length / accessorCount;
1899
+ for(var j2 = 0; j2 < accessorCount; j2++){
1900
+ var offset2 = baseOffset2 + j2 * stride3;
1901
+ var boneIndex = new miniprogram$1.Vector4(vertices[offset2], vertices[offset2 + 1], vertices[offset2 + 2], vertices[offset2 + 3]);
1902
+ elementNormalized && boneIndex.scale(scaleFactor);
1903
+ boneIndices[j2] = boneIndex;
1904
+ }
1905
+ } else if (attribute === "WEIGHTS_0" && keepMeshData) {
1906
+ var baseOffset3 = elementOffset / vertices.BYTES_PER_ELEMENT;
1907
+ var stride4 = vertices.length / accessorCount;
1908
+ for(var j3 = 0; j3 < accessorCount; j3++){
1909
+ var offset3 = baseOffset3 + j3 * stride4;
1910
+ var boneWeight = new miniprogram$1.Vector4(vertices[offset3], vertices[offset3 + 1], vertices[offset3 + 2], vertices[offset3 + 3]);
1911
+ elementNormalized && boneWeight.scale(scaleFactor);
1912
+ boneWeights[j3] = boneWeight;
1877
1913
  }
1878
1914
  }
1879
1915
  }
@@ -1892,6 +1928,10 @@ var MeshParser = /*#__PURE__*/ function(Parser1) {
1892
1928
  mesh.uploadData(!keepMeshData);
1893
1929
  //@ts-ignore
1894
1930
  mesh._positions = positions;
1931
+ //@ts-ignore
1932
+ mesh._boneIndices = boneIndices;
1933
+ //@ts-ignore
1934
+ mesh._boneWeights = boneWeights;
1895
1935
  return Promise.resolve(mesh);
1896
1936
  };
1897
1937
  _proto._createBlendShape = function _createBlendShape(mesh, glTFMesh, glTFTargets, getBlendShapeData) {
package/dist/module.js CHANGED
@@ -1803,21 +1803,31 @@ var MeshParser = /*#__PURE__*/ function(Parser1) {
1803
1803
  var vertexCount;
1804
1804
  var bufferBindIndex = 0;
1805
1805
  var positions;
1806
- keepMeshData && (positions = new Array(vertexCount));
1806
+ var boneIndices;
1807
+ var boneWeights;
1808
+ if (keepMeshData) {
1809
+ positions = new Array(vertexCount);
1810
+ boneIndices = new Array(vertexCount);
1811
+ boneWeights = new Array(vertexCount);
1812
+ }
1807
1813
  for(var attribute in attributes){
1808
1814
  var accessor = accessors[attributes[attribute]];
1809
1815
  var accessorBuffer = GLTFUtil.getAccessorBuffer(context, gltf, accessor);
1810
- var dataElmentSize = GLTFUtil.getAccessorTypeSize(accessor.type);
1811
- var attributeCount = accessor.count;
1816
+ var dataElementSize = GLTFUtil.getAccessorTypeSize(accessor.type);
1817
+ var accessorCount = accessor.count;
1812
1818
  var vertices = accessorBuffer.data;
1813
1819
  var vertexElement = void 0;
1814
1820
  var meshId = mesh.instanceId;
1815
1821
  var vertexBindingInfos = accessorBuffer.vertexBindingInfos;
1816
- var elementFormat = GLTFUtil.getElementFormat(accessor.componentType, dataElmentSize, accessor.normalized);
1822
+ var elementNormalized = accessor.normalized;
1823
+ var elementFormat = GLTFUtil.getElementFormat(accessor.componentType, dataElementSize, elementNormalized);
1824
+ var scaleFactor = void 0;
1825
+ elementNormalized && (scaleFactor = GLTFUtil.getNormalizedComponentScale(accessor.componentType));
1826
+ var elementOffset = void 0;
1817
1827
  if (accessorBuffer.interleaved) {
1818
1828
  var byteOffset = accessor.byteOffset || 0;
1819
1829
  var stride = accessorBuffer.stride;
1820
- var elementOffset = byteOffset % stride;
1830
+ elementOffset = byteOffset % stride;
1821
1831
  if (vertexBindingInfos[meshId] === undefined) {
1822
1832
  vertexElement = new VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
1823
1833
  var vertexBuffer = accessorBuffer.vertexBuffer;
@@ -1832,7 +1842,8 @@ var MeshParser = /*#__PURE__*/ function(Parser1) {
1832
1842
  vertexElement = new VertexElement(attribute, elementOffset, elementFormat, vertexBindingInfos[meshId]);
1833
1843
  }
1834
1844
  } else {
1835
- vertexElement = new VertexElement(attribute, 0, elementFormat, bufferBindIndex);
1845
+ elementOffset = 0;
1846
+ vertexElement = new VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
1836
1847
  var vertexBuffer1 = new Buffer(engine, BufferBindFlag.VertexBuffer, vertices.byteLength, BufferUsage.Static);
1837
1848
  vertexBuffer1.setData(vertices);
1838
1849
  mesh.setVertexBufferBinding(vertexBuffer1, accessorBuffer.stride, bufferBindIndex);
@@ -1840,35 +1851,60 @@ var MeshParser = /*#__PURE__*/ function(Parser1) {
1840
1851
  }
1841
1852
  vertexElements.push(vertexElement);
1842
1853
  if (attribute === "POSITION") {
1843
- vertexCount = attributeCount;
1854
+ vertexCount = accessorCount;
1844
1855
  var _mesh_bounds = mesh.bounds, min = _mesh_bounds.min, max = _mesh_bounds.max;
1845
1856
  if (accessor.min && accessor.max) {
1846
1857
  min.copyFromArray(accessor.min);
1847
1858
  max.copyFromArray(accessor.max);
1848
1859
  if (keepMeshData) {
1849
- var stride1 = vertices.length / attributeCount;
1850
- for(var j = 0; j < attributeCount; j++){
1851
- var offset = j * stride1;
1852
- positions[j] = new Vector3(vertices[offset], vertices[offset + 1], vertices[offset + 2]);
1860
+ var baseOffset = elementOffset / vertices.BYTES_PER_ELEMENT;
1861
+ var stride1 = vertices.length / accessorCount;
1862
+ for(var j = 0; j < accessorCount; j++){
1863
+ var offset = baseOffset + j * stride1;
1864
+ var position = new Vector3(vertices[offset], vertices[offset + 1], vertices[offset + 2]);
1865
+ elementNormalized && position.scale(scaleFactor);
1866
+ positions[j] = position;
1853
1867
  }
1854
1868
  }
1855
1869
  } else {
1856
- var position = MeshParser._tempVector3;
1870
+ var position1 = MeshParser._tempVector3;
1857
1871
  min.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
1858
1872
  max.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
1859
- var stride2 = vertices.length / attributeCount;
1860
- for(var j1 = 0; j1 < attributeCount; j1++){
1861
- var offset1 = j1 * stride2;
1862
- position.copyFromArray(vertices, offset1);
1863
- Vector3.min(min, position, min);
1864
- Vector3.max(max, position, max);
1865
- keepMeshData && (positions[j1] = position.clone());
1873
+ var baseOffset1 = elementOffset / vertices.BYTES_PER_ELEMENT;
1874
+ var stride2 = vertices.length / accessorCount;
1875
+ for(var j1 = 0; j1 < accessorCount; j1++){
1876
+ var offset1 = baseOffset1 + j1 * stride2;
1877
+ position1.copyFromArray(vertices, offset1);
1878
+ Vector3.min(min, position1, min);
1879
+ Vector3.max(max, position1, max);
1880
+ if (keepMeshData) {
1881
+ var clonePosition = position1.clone();
1882
+ elementNormalized && clonePosition.scale(scaleFactor);
1883
+ positions[j1] = clonePosition;
1884
+ }
1866
1885
  }
1867
1886
  }
1868
- if (accessor.normalized) {
1869
- var sacleFactor = GLTFUtil.getNormalizedComponentScale(accessor.componentType);
1870
- min.scale(sacleFactor);
1871
- max.scale(sacleFactor);
1887
+ if (elementNormalized) {
1888
+ min.scale(scaleFactor);
1889
+ max.scale(scaleFactor);
1890
+ }
1891
+ } else if (attribute === "JOINTS_0" && keepMeshData) {
1892
+ var baseOffset2 = elementOffset / vertices.BYTES_PER_ELEMENT;
1893
+ var stride3 = vertices.length / accessorCount;
1894
+ for(var j2 = 0; j2 < accessorCount; j2++){
1895
+ var offset2 = baseOffset2 + j2 * stride3;
1896
+ var boneIndex = new Vector4(vertices[offset2], vertices[offset2 + 1], vertices[offset2 + 2], vertices[offset2 + 3]);
1897
+ elementNormalized && boneIndex.scale(scaleFactor);
1898
+ boneIndices[j2] = boneIndex;
1899
+ }
1900
+ } else if (attribute === "WEIGHTS_0" && keepMeshData) {
1901
+ var baseOffset3 = elementOffset / vertices.BYTES_PER_ELEMENT;
1902
+ var stride4 = vertices.length / accessorCount;
1903
+ for(var j3 = 0; j3 < accessorCount; j3++){
1904
+ var offset3 = baseOffset3 + j3 * stride4;
1905
+ var boneWeight = new Vector4(vertices[offset3], vertices[offset3 + 1], vertices[offset3 + 2], vertices[offset3 + 3]);
1906
+ elementNormalized && boneWeight.scale(scaleFactor);
1907
+ boneWeights[j3] = boneWeight;
1872
1908
  }
1873
1909
  }
1874
1910
  }
@@ -1887,6 +1923,10 @@ var MeshParser = /*#__PURE__*/ function(Parser1) {
1887
1923
  mesh.uploadData(!keepMeshData);
1888
1924
  //@ts-ignore
1889
1925
  mesh._positions = positions;
1926
+ //@ts-ignore
1927
+ mesh._boneIndices = boneIndices;
1928
+ //@ts-ignore
1929
+ mesh._boneWeights = boneWeights;
1890
1930
  return Promise.resolve(mesh);
1891
1931
  };
1892
1932
  _proto._createBlendShape = function _createBlendShape(mesh, glTFMesh, glTFTargets, getBlendShapeData) {