提交 ac5cfd16 编写于 作者: L Lewy Blue

added empty genMorphGeo function

上级 75a6e2da
......@@ -104,7 +104,6 @@
var textures = parseTextures( FBXTree, new THREE.TextureLoader( this.manager ).setPath( resourceDirectory ), images, connections );
var materials = parseMaterials( FBXTree, textures, connections );
var deformers = parseDeformers( FBXTree, connections );
console.log( 'deformers', deformers );
var geometryMap = parseGeometries( FBXTree, connections, deformers );
var sceneGraph = parseScene( FBXTree, connections, deformers.skeletons, geometryMap, materials );
......@@ -595,11 +594,15 @@
} else if ( deformerNode.attrType === 'BlendShape' ) {
var morphTarget = parseMorphTargets( relationships, deformerNode, DeformerNodes, connections, FBXTree );
var morphTarget = {
id: nodeID,
};
morphTarget.rawTargets = parseMorphTargets( relationships, deformerNode, DeformerNodes, connections, FBXTree );
morphTarget.id = nodeID;
if ( relationships.parents.length > 1 ) console.warn( 'THREE.FBXLoader: morph target attached to more than one geometry is not supported.' );
morphTarget.parentID = relationships.parents[ 0 ].ID;
morphTarget.parentGeoID = relationships.parents[ 0 ].ID;
morphTargets[ nodeID ] = morphTarget;
......@@ -709,7 +712,6 @@
}
// Parse nodes in FBXTree.Objects.Geometry
function parseGeometries( FBXTree, connections, deformers ) {
......@@ -719,8 +721,6 @@
var geometryNodes = FBXTree.Objects.Geometry;
for ( var nodeID in geometryNodes ) {
var relationships = connections.get( parseInt( nodeID ) );
......@@ -753,7 +753,6 @@
}
// Parse single node mesh geometry in FBXTree.Objects.Geometry
function parseMeshGeometry( FBXTree, relationships, geometryNode, deformers ) {
......@@ -819,11 +818,47 @@
}
function addMorphTargets( FBXTree, parentGeo, morphTarget, preTransform ) {
if ( morphTarget === null ) return;
parentGeo.morphAttributes.position = [];
parentGeo.morphAttributes.normal = [];
morphTarget.rawTargets.forEach( function ( rawTarget, index ) {
var geoNode = FBXTree.Objects.Geometry[ rawTarget.geoID ];
if ( geoNode !== undefined ) {
genMorphGeometry( parentGeo, geoNode, preTransform, index );
}
} );
}
// a morph geometry is similar to a normal geometry, and the node is also included
// in FBXTree.Objects.Geometry, however it can only have attributes for position, normal
// and a special attribute Index defining which vertices of the original geometry
// it controls
function genMorphGeometry( parentGeo, geoNode, preTransform ) {
var vertexPositions = ( geoNode.Vertices !== undefined ) ? geoNode.Vertices.a : [];
var normalsPositions = ( geoNode.Normals !== undefined ) ? geoNode.Normals.a : [];
var indices = ( geoNode.Indexes !== undefined ) ? geoNode.Indexes.a : [];
}
// Generate a THREE.BufferGeometry from a node in FBXTree.Objects.Geometry
function genGeometry( FBXTree, geometryNode, skeleton, morphTarget, preTransform ) {
function genGeometry( FBXTree, geometryNode, skeleton, morphTarget, preTransform, calledFrom ) {
var geo = new THREE.BufferGeometry();
if ( geometryNode.attrName ) geo.name = geometryNode.attrName;
var vertexPositions = geometryNode.Vertices.a;
var vertexIndices = geometryNode.PolygonVertexIndex.a;
var vertexPositions = ( geometryNode.Vertices !== undefined ) ? geometryNode.Vertices.a : [];
var vertexIndices = ( geometryNode.PolygonVertexIndex !== undefined ) ? geometryNode.PolygonVertexIndex.a : [];
// create arrays to hold the final data used to build the buffergeometry
var vertexBuffer = [];
......@@ -1166,9 +1201,6 @@
} );
var geo = new THREE.BufferGeometry();
geo.name = geometryNode.name;
var positionAttribute = new THREE.Float32BufferAttribute( vertexBuffer, 3 );
preTransform.applyToBufferAttribute( positionAttribute );
......@@ -1262,11 +1294,12 @@
}
addMorphTargets( FBXTree, geo, morphTarget, preTransform );
return geo;
}
// Parse normal from FBXTree.Objects.Geometry.LayerElementNormal if it exists
function getNormals( NormalNode ) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册