|
@@ -976,7 +976,9 @@ THREE.GLTFLoader = ( function () {
|
|
|
|
|
|
var arraybuffer = dependencies.buffers[ bufferView.buffer ];
|
|
|
|
|
|
- return arraybuffer.slice( bufferView.byteOffset, bufferView.byteOffset + bufferView.byteLength );
|
|
|
+ var byteLength = bufferView.byteLength !== undefined ? bufferView.byteLength : 0;
|
|
|
+
|
|
|
+ return arraybuffer.slice( bufferView.byteOffset, bufferView.byteOffset + byteLength );
|
|
|
|
|
|
} );
|
|
|
|
|
@@ -1549,7 +1551,7 @@ THREE.GLTFLoader = ( function () {
|
|
|
|
|
|
if ( mesh.extras ) group.userData = mesh.extras;
|
|
|
|
|
|
- var primitives = mesh.primitives;
|
|
|
+ var primitives = mesh.primitives || [];
|
|
|
|
|
|
for ( var name in primitives ) {
|
|
|
|
|
@@ -1697,18 +1699,13 @@ THREE.GLTFLoader = ( function () {
|
|
|
if ( camera.type == "perspective" && camera.perspective ) {
|
|
|
|
|
|
var yfov = camera.perspective.yfov;
|
|
|
- var xfov = camera.perspective.xfov;
|
|
|
- var aspect_ratio = camera.perspective.aspect_ratio || 1;
|
|
|
-
|
|
|
- // According to COLLADA spec...
|
|
|
- // aspect_ratio = xfov / yfov
|
|
|
- xfov = ( xfov === undefined && yfov ) ? yfov * aspect_ratio : xfov;
|
|
|
+ var aspectRatio = camera.perspective.aspectRatio !== undefined ? camera.perspective.aspectRatio : 1;
|
|
|
|
|
|
// According to COLLADA spec...
|
|
|
- // aspect_ratio = xfov / yfov
|
|
|
- // yfov = ( yfov === undefined && xfov ) ? xfov / aspect_ratio : yfov;
|
|
|
+ // aspectRatio = xfov / yfov
|
|
|
+ var xfov = yfov * aspectRatio;
|
|
|
|
|
|
- var _camera = new THREE.PerspectiveCamera( THREE.Math.radToDeg( xfov ), aspect_ratio, camera.perspective.znear || 1, camera.perspective.zfar || 2e6 );
|
|
|
+ var _camera = new THREE.PerspectiveCamera( THREE.Math.radToDeg( xfov ), aspectRatio, camera.perspective.znear || 1, camera.perspective.zfar || 2e6 );
|
|
|
if ( camera.name !== undefined ) _camera.name = camera.name;
|
|
|
|
|
|
if ( camera.extras ) _camera.userData = camera.extras;
|
|
@@ -1742,8 +1739,12 @@ THREE.GLTFLoader = ( function () {
|
|
|
|
|
|
return _each( json.skins, function ( skin ) {
|
|
|
|
|
|
+ var bindShapeMatrix = new THREE.Matrix4();
|
|
|
+
|
|
|
+ if ( skin.bindShapeMatrix !== undefined ) bindShapeMatrix.fromArray( skin.bindShapeMatrix );
|
|
|
+
|
|
|
var _skin = {
|
|
|
- bindShapeMatrix: new THREE.Matrix4().fromArray( skin.bindShapeMatrix ),
|
|
|
+ bindShapeMatrix: bindShapeMatrix,
|
|
|
jointNames: skin.jointNames,
|
|
|
inverseBindMatrices: dependencies.accessors[ skin.inverseBindMatrices ]
|
|
|
};
|
|
@@ -1798,6 +1799,7 @@ THREE.GLTFLoader = ( function () {
|
|
|
: THREE.VectorKeyframeTrack;
|
|
|
|
|
|
var targetName = node.name ? node.name : node.uuid;
|
|
|
+ var interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : THREE.InterpolateLinear;
|
|
|
|
|
|
// KeyframeTrack.optimize() will modify given 'times' and 'values'
|
|
|
// buffers before creating a truncated copy to keep. Because buffers may
|
|
@@ -1806,7 +1808,7 @@ THREE.GLTFLoader = ( function () {
|
|
|
targetName + '.' + PATH_PROPERTIES[ target.path ],
|
|
|
THREE.AnimationUtils.arraySlice( inputAccessor.array, 0 ),
|
|
|
THREE.AnimationUtils.arraySlice( outputAccessor.array, 0 ),
|
|
|
- INTERPOLATION[ sampler.interpolation ]
|
|
|
+ interpolation
|
|
|
) );
|
|
|
|
|
|
}
|
|
@@ -1815,7 +1817,9 @@ THREE.GLTFLoader = ( function () {
|
|
|
|
|
|
}
|
|
|
|
|
|
- return new THREE.AnimationClip( "animation_" + animationId, undefined, tracks );
|
|
|
+ var name = animation.name !== undefined ? animation.name : "animation_" + animationId;
|
|
|
+
|
|
|
+ return new THREE.AnimationClip( name, undefined, tracks );
|
|
|
|
|
|
} );
|
|
|
|
|
@@ -2116,7 +2120,7 @@ THREE.GLTFLoader = ( function () {
|
|
|
|
|
|
if ( scene.extras ) _scene.userData = scene.extras;
|
|
|
|
|
|
- var nodes = scene.nodes;
|
|
|
+ var nodes = scene.nodes || [];
|
|
|
|
|
|
for ( var i = 0, l = nodes.length; i < l; i ++ ) {
|
|
|
|