2
0
Эх сурвалжийг харах

ColladaLoader: rudimentary LineStrips support.

Mr.doob 10 жил өмнө
parent
commit
829d969579

+ 39 - 14
examples/js/loaders/ColladaLoader.js

@@ -1225,16 +1225,18 @@ THREE.ColladaLoader = function () {
 
 				} else {
 
-					mesh = new THREE.Mesh( geom, material );
-					// mesh.geom.name = geometry.id;
+					if ( geom.isLineStrip === true ) {
+
+						mesh = new THREE.Line( geom );
+
+					} else {
+
+						mesh = new THREE.Mesh( geom, material );
+
+					}
 
 				}
 
-				// N.B.: TP says this is not a great default behavior. It's a nice
-				// optimization to flatten the hierarchy but this should be done
-				// only if requested by the user via a flag. For now I undid it
-				// and fixed the character animation example that uses it
-				// node.geometries.length > 1 ? obj.add( mesh ) : obj = mesh;
 				obj.add(mesh);
 
 			}
@@ -2754,13 +2756,11 @@ THREE.ColladaLoader = function () {
 
 	};
 
-	Mesh.prototype.parse = function( element ) {
+	Mesh.prototype.parse = function ( element ) {
 
 		this.primitives = [];
 
-		var i, j;
-
-		for ( i = 0; i < element.childNodes.length; i ++ ) {
+		for ( var i = 0; i < element.childNodes.length; i ++ ) {
 
 			var child = element.childNodes[ i ];
 
@@ -2776,6 +2776,11 @@ THREE.ColladaLoader = function () {
 					this.vertices = ( new Vertices() ).parse( child );
 					break;
 
+				case 'linestrips':
+
+					this.primitives.push( ( new LineStrips().parse( child ) ) );
+					break;
+
 				case 'triangles':
 
 					this.primitives.push( ( new Triangles().parse( child ) ) );
@@ -2802,13 +2807,13 @@ THREE.ColladaLoader = function () {
 
 		var vertexData = sources[ this.vertices.input['POSITION'].source ].data;
 
-		for ( i = 0; i < vertexData.length; i += 3 ) {
+		for ( var i = 0; i < vertexData.length; i += 3 ) {
 
 			this.geometry3js.vertices.push( getConvertedVec3( vertexData, i ).clone() );
 
 		}
 
-		for ( i = 0; i < this.primitives.length; i ++ ) {
+		for ( var i = 0; i < this.primitives.length; i ++ ) {
 
 			var primitive = this.primitives[ i ];
 			primitive.setVertices( this.vertices );
@@ -2831,7 +2836,16 @@ THREE.ColladaLoader = function () {
 
 	};
 
-	Mesh.prototype.handlePrimitive = function( primitive, geom ) {
+	Mesh.prototype.handlePrimitive = function ( primitive, geom ) {
+
+		if ( primitive instanceof LineStrips ) {
+
+			// TODO: Handle indices. Maybe easier with BufferGeometry?
+
+			geom.isLineStrip = true;
+			return;
+
+		}
 
 		var j, k, pList = primitive.p, inputs = primitive.inputs;
 		var input, index, idx32;
@@ -3083,6 +3097,7 @@ THREE.ColladaLoader = function () {
 				i += maxOffset * vcount;
 
 			}
+
 		}
 
 	};
@@ -3164,6 +3179,16 @@ THREE.ColladaLoader = function () {
 
 	Polylist.prototype = Object.create( Polygons.prototype );
 
+	function LineStrips() {
+
+		Polygons.call( this );
+
+		this.vcount = 1;
+
+	};
+
+	LineStrips.prototype = Object.create( Polygons.prototype );
+
 	function Triangles () {
 
 		Polygons.call( this );