提交 32807be8 编写于 作者: M Mr.doob

ColladaLoader2: Simplified library parsing. instance_node support.

上级 2f76bac6
......@@ -74,31 +74,33 @@ THREE.ColladaLoader.prototype = {
}
// cameras
// library
function parseCamerasLibrary( xml ) {
function parseLibrary( xml, libraryName, nodeName, parser ) {
var library = {};
var data = {};
var cameras = xml.getElementsByTagName( 'library_cameras' )[ 0 ];
var library = xml.getElementsByTagName( libraryName )[ 0 ];
if ( cameras !== undefined ) {
if ( library !== undefined ) {
var elements = cameras.getElementsByTagName( 'camera' );
var elements = library.getElementsByTagName( nodeName );
for ( var i = 0; i < elements.length; i ++ ) {
var element = elements[ i ];
library[ element.getAttribute( 'id' ) ] = parseCamera( element );
data[ element.getAttribute( 'id' ) ] = parser( element );
}
}
return library;
return data;
}
// camera
function parseCamera( xml ) {
console.log( 'ColladaLoader.parseCamera: TODO')
......@@ -109,27 +111,7 @@ THREE.ColladaLoader.prototype = {
}
// geometries
function parseGeometriesLibrary( xml ) {
var library = {};
var geometries = xml.getElementsByTagName( 'library_geometries' )[ 0 ];
var elements = geometries.getElementsByTagName( 'geometry' );
for ( var i = 0; i < elements.length; i ++ ) {
var element = elements[ i ];
var geometry = parseGeometry( element );
library[ element.getAttribute( 'id' ) ] = createGeometry( geometry );
}
return library;
}
// geometry
function parseGeometry( xml ) {
......@@ -172,7 +154,7 @@ THREE.ColladaLoader.prototype = {
}
return data;
return createGeometry( data );
}
......@@ -328,13 +310,6 @@ THREE.ColladaLoader.prototype = {
// nodes
function parseNodesLibrary( xml ) {
var library = {};
return library;
}
var material = new THREE.MeshPhongMaterial();
var matrix = new THREE.Matrix4();
var vector = new THREE.Vector3();
......@@ -363,6 +338,10 @@ THREE.ColladaLoader.prototype = {
node.geometry = geometriesLibrary[ parseId( child.getAttribute( 'url' ) ) ];
break;
case 'instance_node':
node.children.push( nodesLibrary[ parseId( child.getAttribute( 'url' ) ) ] );
break;
case 'matrix':
var array = parseFloats( child.textContent );
node.matrix.multiply( matrix.fromArray( array ) );
......@@ -433,24 +412,6 @@ THREE.ColladaLoader.prototype = {
// visual scenes
function parseVisualScenesLibrary( xml ) {
var library = {};
var visualScenes = xml.getElementsByTagName( 'library_visual_scenes' )[ 0 ];
var elements = visualScenes.getElementsByTagName( 'visual_scene' );
for ( var i = 0; i < elements.length; i ++ ) {
var element = elements[ i ];
library[ element.getAttribute( 'id' ) ] = parseVisualScene( element );
}
return library;
}
function parseVisualScene( xml ) {
var group = new THREE.Group();
......@@ -487,10 +448,10 @@ THREE.ColladaLoader.prototype = {
console.timeEnd( 'ColladaLoader: DOMParser' );
var camerasLibrary = parseCamerasLibrary( xml );
var geometriesLibrary = parseGeometriesLibrary( xml );
var nodesLibrary = parseNodesLibrary( xml );
var visualScenesLibrary = parseVisualScenesLibrary( xml );
var camerasLibrary = parseLibrary( xml, 'library_cameras', 'camera', parseCamera );
var geometriesLibrary = parseLibrary( xml, 'library_geometries', 'geometry', parseGeometry );
var nodesLibrary = parseLibrary( xml, 'library_nodes', 'node', parseNode );
var visualScenesLibrary = parseLibrary( xml, 'library_visual_scenes', 'visual_scene', parseVisualScene );
var scene = parseScene( xml );
console.timeEnd( 'ColladaLoader' );
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册