提交 b362a81f 编写于 作者: G Gavrilov Miroslav

FBXLoader had FBXTree (the class) overshadowed by FBXTree (the field), which...

FBXLoader had FBXTree (the class) overshadowed by FBXTree (the field), which caused an error which happens only when the loader is used at least twice
上级 3585caf4
......@@ -21,7 +21,7 @@
THREE.FBXLoader = ( function () {
var FBXTree;
var FBXTreeInstance;
var connections;
var sceneGraph;
......@@ -38,7 +38,6 @@ THREE.FBXLoader = ( function () {
crossOrigin: 'anonymous',
load: function ( url, onLoad, onProgress, onError ) {
var self = this;
var resourceDirectory = THREE.LoaderUtils.extractUrlBase( url );
......@@ -65,7 +64,6 @@ THREE.FBXLoader = ( function () {
}
}, onProgress, onError );
},
setCrossOrigin: function ( value ) {
......@@ -79,7 +77,7 @@ THREE.FBXLoader = ( function () {
if ( isFbxFormatBinary( FBXBuffer ) ) {
FBXTree = new BinaryParser().parse( FBXBuffer );
FBXTreeInstance = new BinaryParser().parse( FBXBuffer );
} else {
......@@ -97,7 +95,7 @@ THREE.FBXLoader = ( function () {
}
FBXTree = new TextParser().parse( FBXText );
FBXTreeInstance = new TextParser().parse( FBXText );
}
......@@ -105,7 +103,7 @@ THREE.FBXLoader = ( function () {
var textureLoader = new THREE.TextureLoader( this.manager ).setPath( resourceDirectory ).setCrossOrigin( this.crossOrigin );
return new FBXTreeParser( textureLoader ).parse( FBXTree );
return new FBXTreeParser( textureLoader ).parse( FBXTreeInstance );
}
......@@ -144,9 +142,9 @@ THREE.FBXLoader = ( function () {
var connectionMap = new Map();
if ( 'Connections' in FBXTree ) {
if ( 'Connections' in FBXTreeInstance ) {
var rawConnections = FBXTree.Connections.connections;
var rawConnections = FBXTreeInstance.Connections.connections;
rawConnections.forEach( function ( rawConnection ) {
......@@ -194,9 +192,9 @@ THREE.FBXLoader = ( function () {
var images = {};
var blobs = {};
if ( 'Video' in FBXTree.Objects ) {
if ( 'Video' in FBXTreeInstance.Objects ) {
var videoNodes = FBXTree.Objects.Video;
var videoNodes = FBXTreeInstance.Objects.Video;
for ( var nodeID in videoNodes ) {
......@@ -318,9 +316,9 @@ THREE.FBXLoader = ( function () {
var textureMap = new Map();
if ( 'Texture' in FBXTree.Objects ) {
if ( 'Texture' in FBXTreeInstance.Objects ) {
var textureNodes = FBXTree.Objects.Texture;
var textureNodes = FBXTreeInstance.Objects.Texture;
for ( var nodeID in textureNodes ) {
var texture = this.parseTexture( textureNodes[ nodeID ], images );
......@@ -412,9 +410,9 @@ THREE.FBXLoader = ( function () {
var materialMap = new Map();
if ( 'Material' in FBXTree.Objects ) {
if ( 'Material' in FBXTreeInstance.Objects ) {
var materialNodes = FBXTree.Objects.Material;
var materialNodes = FBXTreeInstance.Objects.Material;
for ( var nodeID in materialNodes ) {
......@@ -609,7 +607,7 @@ THREE.FBXLoader = ( function () {
getTexture: function ( textureMap, id ) {
// if the texture is a layered texture, just use the first layer and issue a warning
if ( 'LayeredTexture' in FBXTree.Objects && id in FBXTree.Objects.LayeredTexture ) {
if ( 'LayeredTexture' in FBXTreeInstance.Objects && id in FBXTreeInstance.Objects.LayeredTexture ) {
console.warn( 'THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer.' );
id = connections.get( id ).children[ 0 ].ID;
......@@ -628,9 +626,9 @@ THREE.FBXLoader = ( function () {
var skeletons = {};
var morphTargets = {};
if ( 'Deformer' in FBXTree.Objects ) {
if ( 'Deformer' in FBXTreeInstance.Objects ) {
var DeformerNodes = FBXTree.Objects.Deformer;
var DeformerNodes = FBXTreeInstance.Objects.Deformer;
for ( var nodeID in DeformerNodes ) {
......@@ -773,7 +771,7 @@ THREE.FBXLoader = ( function () {
var modelMap = this.parseModels( deformers.skeletons, geometryMap, materialMap );
var modelNodes = FBXTree.Objects.Model;
var modelNodes = FBXTreeInstance.Objects.Model;
var self = this;
modelMap.forEach( function ( model ) {
......@@ -823,7 +821,7 @@ THREE.FBXLoader = ( function () {
parseModels: function ( skeletons, geometryMap, materialMap ) {
var modelMap = new Map();
var modelNodes = FBXTree.Objects.Model;
var modelNodes = FBXTreeInstance.Objects.Model;
for ( var nodeID in modelNodes ) {
......@@ -923,7 +921,7 @@ THREE.FBXLoader = ( function () {
relationships.children.forEach( function ( child ) {
var attr = FBXTree.Objects.NodeAttribute[ child.ID ];
var attr = FBXTreeInstance.Objects.NodeAttribute[ child.ID ];
if ( attr !== undefined ) {
......@@ -1014,7 +1012,7 @@ THREE.FBXLoader = ( function () {
relationships.children.forEach( function ( child ) {
var attr = FBXTree.Objects.NodeAttribute[ child.ID ];
var attr = FBXTreeInstance.Objects.NodeAttribute[ child.ID ];
if ( attr !== undefined ) {
......@@ -1244,7 +1242,7 @@ THREE.FBXLoader = ( function () {
if ( child.relationship === 'LookAtProperty' ) {
var lookAtTarget = FBXTree.Objects.Model[ child.ID ];
var lookAtTarget = FBXTreeInstance.Objects.Model[ child.ID ];
if ( 'Lcl_Translation' in lookAtTarget ) {
......@@ -1313,9 +1311,9 @@ THREE.FBXLoader = ( function () {
var bindMatrices = {};
if ( 'Pose' in FBXTree.Objects ) {
if ( 'Pose' in FBXTreeInstance.Objects ) {
var BindPoseNode = FBXTree.Objects.Pose;
var BindPoseNode = FBXTreeInstance.Objects.Pose;
for ( var nodeID in BindPoseNode ) {
......@@ -1350,9 +1348,9 @@ THREE.FBXLoader = ( function () {
// Parse ambient color in FBXTree.GlobalSettings - if it's not set to black (default), create an ambient light
createAmbientLight: function () {
if ( 'GlobalSettings' in FBXTree && 'AmbientColor' in FBXTree.GlobalSettings ) {
if ( 'GlobalSettings' in FBXTreeInstance && 'AmbientColor' in FBXTreeInstance.GlobalSettings ) {
var ambientColor = FBXTree.GlobalSettings.AmbientColor.value;
var ambientColor = FBXTreeInstance.GlobalSettings.AmbientColor.value;
var r = ambientColor[ 0 ];
var g = ambientColor[ 1 ];
var b = ambientColor[ 2 ];
......@@ -1418,9 +1416,9 @@ THREE.FBXLoader = ( function () {
var geometryMap = new Map();
if ( 'Geometry' in FBXTree.Objects ) {
if ( 'Geometry' in FBXTreeInstance.Objects ) {
var geoNodes = FBXTree.Objects.Geometry;
var geoNodes = FBXTreeInstance.Objects.Geometry;
for ( var nodeID in geoNodes ) {
......@@ -1462,7 +1460,7 @@ THREE.FBXLoader = ( function () {
var modelNodes = relationships.parents.map( function ( parent ) {
return FBXTree.Objects.Model[ parent.ID ];
return FBXTreeInstance.Objects.Model[ parent.ID ];
} );
......@@ -1990,7 +1988,7 @@ THREE.FBXLoader = ( function () {
var self = this;
morphTarget.rawTargets.forEach( function ( rawTarget ) {
var morphGeoNode = FBXTree.Objects.Geometry[ rawTarget.geoID ];
var morphGeoNode = FBXTreeInstance.Objects.Geometry[ rawTarget.geoID ];
if ( morphGeoNode !== undefined ) {
......@@ -2271,7 +2269,7 @@ THREE.FBXLoader = ( function () {
// since the actual transformation data is stored in FBXTree.Objects.AnimationCurve,
// if this is undefined we can safely assume there are no animations
if ( FBXTree.Objects.AnimationCurve === undefined ) return undefined;
if ( FBXTreeInstance.Objects.AnimationCurve === undefined ) return undefined;
var curveNodesMap = this.parseAnimationCurveNodes();
......@@ -2289,7 +2287,7 @@ THREE.FBXLoader = ( function () {
// and is referenced by an AnimationLayer
parseAnimationCurveNodes: function () {
var rawCurveNodes = FBXTree.Objects.AnimationCurveNode;
var rawCurveNodes = FBXTreeInstance.Objects.AnimationCurveNode;
var curveNodesMap = new Map();
......@@ -2322,7 +2320,7 @@ THREE.FBXLoader = ( function () {
// axis ( e.g. times and values of x rotation)
parseAnimationCurves: function ( curveNodesMap ) {
var rawCurves = FBXTree.Objects.AnimationCurve;
var rawCurves = FBXTreeInstance.Objects.AnimationCurve;
// TODO: Many values are identical up to roundoff error, but won't be optimised
// e.g. position times: [0, 0.4, 0. 8]
......@@ -2377,7 +2375,7 @@ THREE.FBXLoader = ( function () {
// note: theoretically a stack can have multiple layers, however in practice there always seems to be one per stack
parseAnimationLayers: function ( curveNodesMap ) {
var rawLayers = FBXTree.Objects.AnimationLayer;
var rawLayers = FBXTreeInstance.Objects.AnimationLayer;
var layersMap = new Map();
......@@ -2412,7 +2410,7 @@ THREE.FBXLoader = ( function () {
} );
var rawModel = FBXTree.Objects.Model[ modelID.toString() ];
var rawModel = FBXTreeInstance.Objects.Model[ modelID.toString() ];
var node = {
......@@ -2453,12 +2451,12 @@ THREE.FBXLoader = ( function () {
// assuming geometry is not used in more than one model
var modelID = connections.get( geoID ).parents[ 0 ].ID;
var rawModel = FBXTree.Objects.Model[ modelID ];
var rawModel = FBXTreeInstance.Objects.Model[ modelID ];
var node = {
modelName: THREE.PropertyBinding.sanitizeNodeName( rawModel.attrName ),
morphName: FBXTree.Objects.Deformer[ deformerID ].attrName,
morphName: FBXTreeInstance.Objects.Deformer[ deformerID ].attrName,
};
......@@ -2508,7 +2506,7 @@ THREE.FBXLoader = ( function () {
// hierarchy. Each Stack node will be used to create a THREE.AnimationClip
parseAnimStacks: function ( layersMap ) {
var rawStacks = FBXTree.Objects.AnimationStack;
var rawStacks = FBXTreeInstance.Objects.AnimationStack;
// connect the stacks (clips) up to the layers
var rawClips = {};
......@@ -2874,6 +2872,7 @@ THREE.FBXLoader = ( function () {
parse: function ( text ) {
this.currentIndent = 0;
console.log("FBXTree: ", FBXTree);
this.allNodes = new FBXTree();
this.nodeStack = [];
this.currentProp = [];
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册