Browse Source

STLLoader: Outputing BufferGeomety out of parseBinary.

Mr.doob 11 years ago
parent
commit
fe3fbd7112
1 changed files with 25 additions and 29 deletions
  1. 25 29
      examples/js/loaders/STLLoader.js

+ 25 - 29
examples/js/loaders/STLLoader.js

@@ -99,46 +99,42 @@ THREE.STLLoader.prototype.parse = function ( data ) {
 
 };
 
-THREE.STLLoader.prototype.parseBinary = function (data) {
+THREE.STLLoader.prototype.parseBinary = function ( data ) {
 
-	var face, geometry, n_faces, reader, length, normal, i, dataOffset, faceLength, start, vertexstart;
+	var reader = new DataView( data );
+	var faces = reader.getUint32( 80, true );
+	var dataOffset = 84;
+	var faceLength = 12 * 4 + 2;
 
-	reader = new DataView( data );
-	n_faces = reader.getUint32(80,true);
-	geometry = new THREE.Geometry();
-	dataOffset = 84;
-	faceLength = 12 * 4 + 2;
+	var vertices = new Float32Array( faces * 3 * 3 );
+	var normals = new Float32Array( faces * 3 * 3 );
+	var uvs = new Float32Array( faces * 3 * 2 );
 
-	for (face = 0; face < n_faces; face++) {
+	var offset = 0;
 
-		start = dataOffset + face * faceLength;
-		normal = new THREE.Vector3(
-			reader.getFloat32(start,true),
-			reader.getFloat32(start + 4,true),
-			reader.getFloat32(start + 8,true)
-		);
+	for ( var face = 0; face < faces; face ++ ) {
 
-		for (i = 1; i <= 3; i++) {
+		var start = dataOffset + face * faceLength;
 
-			vertexstart = start + i * 12;
-			geometry.vertices.push(
-				new THREE.Vector3(
-					reader.getFloat32(vertexstart,true),
-					reader.getFloat32(vertexstart +4,true),
-					reader.getFloat32(vertexstart + 8,true)
-				)
-			);
+		for ( var i = 1; i <= 3; i ++ ) {
 
-		}
+			var vertexstart = start + i * 12;
 
-		length = geometry.vertices.length;
-		geometry.faces.push(new THREE.Face3(length - 3, length - 2, length - 1, normal));
+			vertices[ offset     ] = reader.getFloat32( vertexstart, true );
+			vertices[ offset + 1 ] = reader.getFloat32( vertexstart + 4, true );
+			vertices[ offset + 2 ] = reader.getFloat32( vertexstart + 8, true );
 
-	}
+			normals[ offset     ] = reader.getFloat32( start    , true );
+			normals[ offset + 1 ] = reader.getFloat32( start + 4, true );
+			normals[ offset + 2 ] = reader.getFloat32( start + 8, true );
 
-	geometry.computeBoundingSphere();
+			offset += 3;
 
-	return geometry;
+		}
+
+	}
+
+	return new THREE.Geometry2( vertices, normals, uvs );
 
 };