浏览代码

TiltLoader: Join strokes by brush type.

Mr.doob 4 年之前
父节点
当前提交
3fea7a6526
共有 1 个文件被更改,包括 67 次插入43 次删除
  1. 67 43
      examples/jsm/loaders/TiltLoader.js

+ 67 - 43
examples/jsm/loaders/TiltLoader.js

@@ -76,6 +76,8 @@ class TiltLoader extends Loader {
 
 
 		const num_strokes = data.getInt32( 16, true );
 		const num_strokes = data.getInt32( 16, true );
 
 
+		const brushes = {};
+
 		let offset = 20;
 		let offset = 20;
 
 
 		for ( let i = 0; i < num_strokes; i ++ ) {
 		for ( let i = 0; i < num_strokes; i ++ ) {
@@ -134,14 +136,23 @@ class TiltLoader extends Loader {
 
 
 			}
 			}
 
 
-			// console.log( positions, quaternions );
+			if ( brush_index in brushes === false ) {
+
+				brushes[ brush_index ] = [];
+
+			}
+
+			brushes[ brush_index ].push( [ positions, quaternions, brush_size, brush_color ] );
+
+		}
+
+		for ( const brush_index in brushes ) {
 
 
-			const geometry = new StrokeGeometry( positions, quaternions, brush_size, brush_color );
+			const geometry = new StrokeGeometry( brushes[ brush_index ] );
 			const material = getMaterial( metadata.BrushIndex[ brush_index ] );
 			const material = getMaterial( metadata.BrushIndex[ brush_index ] );
 
 
 			group.add( new Mesh( geometry, material ) );
 			group.add( new Mesh( geometry, material ) );
 
 
-
 		}
 		}
 
 
 		return group;
 		return group;
@@ -152,7 +163,7 @@ class TiltLoader extends Loader {
 
 
 class StrokeGeometry extends BufferGeometry {
 class StrokeGeometry extends BufferGeometry {
 
 
-	constructor( positions, quaternions, size, color ) {
+	constructor( strokes ) {
 
 
 		super();
 		super();
 
 
@@ -161,10 +172,10 @@ class StrokeGeometry extends BufferGeometry {
 		const uvs = [];
 		const uvs = [];
 
 
 		const position = new Vector3();
 		const position = new Vector3();
-		const prevPosition = new Vector3().fromArray( positions, 0 );
+		const prevPosition = new Vector3();
 
 
 		const quaternion = new Quaternion();
 		const quaternion = new Quaternion();
-		const prevQuaternion = new Quaternion().fromArray( quaternions, 0 );
+		const prevQuaternion = new Quaternion();
 
 
 		const vector1 = new Vector3();
 		const vector1 = new Vector3();
 		const vector2 = new Vector3();
 		const vector2 = new Vector3();
@@ -173,56 +184,69 @@ class StrokeGeometry extends BufferGeometry {
 
 
 		// size = size / 2;
 		// size = size / 2;
 
 
-		for ( let i = 0, j = 0, l = positions.length; i < l; i += 3, j += 4 ) {
+		for ( const k in strokes ) {
+
+			const stroke = strokes[ k ];
+			const positions = stroke[ 0 ];
+			const quaternions = stroke[ 1 ];
+			const size = stroke[ 2 ];
+			const color = stroke[ 3 ];
+
+			prevPosition.fromArray( positions, 0 );
+			prevQuaternion.fromArray( quaternions, 0 );
 
 
-			position.fromArray( positions, i );
-			quaternion.fromArray( quaternions, j );
+			for ( let i = 3, j = 4, l = positions.length; i < l; i += 3, j += 4 ) {
 
 
-			vector1.set( - size, 0, 0 );
-			vector1.applyQuaternion( quaternion );
-			vector1.add( position );
+				position.fromArray( positions, i );
+				quaternion.fromArray( quaternions, j );
 
 
-			vector2.set( size, 0, 0 );
-			vector2.applyQuaternion( quaternion );
-			vector2.add( position );
+				vector1.set( - size, 0, 0 );
+				vector1.applyQuaternion( quaternion );
+				vector1.add( position );
 
 
-			vector3.set( size, 0, 0 );
-			vector3.applyQuaternion( prevQuaternion );
-			vector3.add( prevPosition );
+				vector2.set( size, 0, 0 );
+				vector2.applyQuaternion( quaternion );
+				vector2.add( position );
 
 
-			vector4.set( - size, 0, 0 );
-			vector4.applyQuaternion( prevQuaternion );
-			vector4.add( prevPosition );
+				vector3.set( size, 0, 0 );
+				vector3.applyQuaternion( prevQuaternion );
+				vector3.add( prevPosition );
 
 
-			vertices.push( vector1.x, vector1.y, - vector1.z );
-			vertices.push( vector2.x, vector2.y, - vector2.z );
-			vertices.push( vector4.x, vector4.y, - vector4.z );
+				vector4.set( - size, 0, 0 );
+				vector4.applyQuaternion( prevQuaternion );
+				vector4.add( prevPosition );
 
 
-			vertices.push( vector2.x, vector2.y, - vector2.z );
-			vertices.push( vector3.x, vector3.y, - vector3.z );
-			vertices.push( vector4.x, vector4.y, - vector4.z );
+				vertices.push( vector1.x, vector1.y, - vector1.z );
+				vertices.push( vector2.x, vector2.y, - vector2.z );
+				vertices.push( vector4.x, vector4.y, - vector4.z );
 
 
-			prevPosition.copy( position );
-			prevQuaternion.copy( quaternion );
+				vertices.push( vector2.x, vector2.y, - vector2.z );
+				vertices.push( vector3.x, vector3.y, - vector3.z );
+				vertices.push( vector4.x, vector4.y, - vector4.z );
 
 
-			colors.push( ...color );
-			colors.push( ...color );
-			colors.push( ...color );
+				prevPosition.copy( position );
+				prevQuaternion.copy( quaternion );
 
 
-			colors.push( ...color );
-			colors.push( ...color );
-			colors.push( ...color );
+				colors.push( ...color );
+				colors.push( ...color );
+				colors.push( ...color );
 
 
-			const p1 = i / l;
-			const p2 = ( i - 3 ) / l;
+				colors.push( ...color );
+				colors.push( ...color );
+				colors.push( ...color );
 
 
-			uvs.push( p1, 0 );
-			uvs.push( p1, 1 );
-			uvs.push( p2, 0 );
+				const p1 = i / l;
+				const p2 = ( i - 3 ) / l;
 
 
-			uvs.push( p1, 1 );
-			uvs.push( p2, 1 );
-			uvs.push( p2, 0 );
+				uvs.push( p1, 0 );
+				uvs.push( p1, 1 );
+				uvs.push( p2, 0 );
+
+				uvs.push( p1, 1 );
+				uvs.push( p2, 1 );
+				uvs.push( p2, 0 );
+
+			}
 
 
 		}
 		}