Ver Fonte

Added experimental VTK Loader.

Mr.doob há 13 anos atrás
pai
commit
45f80cf6d7

+ 87 - 0
examples/js/loaders/VTKLoader2.js

@@ -0,0 +1,87 @@
+/**
+ * @author mrdoob / http://mrdoob.com/
+ */
+
+THREE.VTKLoader2 = function () {};
+
+THREE.VTKLoader2.prototype = new THREE.Loader();
+THREE.VTKLoader2.prototype.constructor = THREE.VTKLoader2;
+
+THREE.VTKLoader2.prototype.load = function ( url, callback ) {
+
+	var that = this;
+	var xhr = new XMLHttpRequest();
+
+	xhr.onreadystatechange = function () {
+
+		if ( xhr.readyState == 4 ) {
+
+			if ( xhr.status == 200 || xhr.status == 0 ) {
+
+				callback( that.parse( xhr.responseText ) );
+
+			} else {
+
+				console.error( 'THREE.VTKLoader: Couldn\'t load ' + url + ' (' + xhr.status + ')' );
+
+			}
+
+		}
+
+	};
+
+	xhr.open( "GET", url, true );
+	xhr.send( null );
+
+};
+
+THREE.VTKLoader2.prototype.parse = function ( data ) {
+
+	var geometry = new THREE.Geometry();
+
+	function vertex( x, y, z ) {
+
+		geometry.vertices.push( new THREE.Vector3( x, y, z ) );
+
+	}
+
+	function face3( a, b, c ) {
+
+		geometry.faces.push( new THREE.Face3( a, b, c ) );
+
+	}
+
+	var pattern, result;
+
+	// float float float
+
+	pattern = /([\d|\.|\+|\-|e]+) ([\d|\.|\+|\-|e]+) ([\d|\.|\+|\-|e]+)/g;
+
+	while ( ( result = pattern.exec( data ) ) != null ) {
+
+		// ["1.0 2.0 3.0", "1.0", "2.0", "3.0"]
+
+		vertex( parseFloat( result[ 1 ] ), parseFloat( result[ 2 ] ), parseFloat( result[ 3 ] ) );
+
+	}
+
+	// 3 int int int
+
+	pattern = /3 ([\d]+) ([\d]+) ([\d]+) /g;
+
+	while ( ( result = pattern.exec( data ) ) != null ) {
+
+		// ["3 1 2 3", "1", "2", "3"]
+
+		face3( parseInt( result[ 1 ] ), parseInt( result[ 2 ] ), parseInt( result[ 3 ] ) );
+
+	}
+
+	geometry.computeCentroids();
+	geometry.computeFaceNormals();
+	geometry.computeVertexNormals();
+	geometry.computeBoundingSphere();
+
+	return geometry;
+
+}

+ 1 - 1
examples/webgl_loader_vtk.html

@@ -1,7 +1,7 @@
 <!doctype html>
 <html lang="en">
 	<head>
-		<title>three.js webgl - io - vtk loader</title>
+		<title>three.js webgl - loaders - vtk loader</title>
 		<meta charset="utf-8">
 		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
 		<style>

+ 119 - 0
examples/webgl_loader_vtk2.html

@@ -0,0 +1,119 @@
+<!doctype html>
+<html lang="en">
+	<head>
+		<title>three.js webgl - loaders - vtk loader (experimental)</title>
+		<meta charset="utf-8">
+		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+		<style>
+			body {
+				font-family: Monospace;
+				background-color: #000;
+				color: #fff;
+				margin: 0px;
+				overflow: hidden;
+			}
+			#info {
+				color: #fff;
+				position: absolute;
+				top: 10px;
+				width: 100%;
+				text-align: center;
+				z-index: 100;
+				display:block;
+			}
+			#info a, .button { color: #f00; font-weight: bold; text-decoration: underline; cursor: pointer }
+		</style>
+	</head>
+
+	<body>
+		<div id="info">
+		<a href="http://github.com/mrdoob/three.js" target="_blank">three.js</a> -
+		vtk format loader test -
+		model from <a href="http://www.cc.gatech.edu/projects/large_models/" target="_blank">The GeorgiaTech Lagre Geometric Model Archive</a>,
+		</div>
+
+		<script src="../build/Three.js"></script>
+		<script src="js/loaders/VTKLoader2.js"></script>
+
+		<script src="js/Detector.js"></script>
+		<script src="js/Stats.js"></script>
+
+		<script>
+
+			if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
+
+			var container, stats;
+
+			var camera, controls, scene, renderer;
+
+			var cross;
+
+
+			// scene and camera
+
+			scene = new THREE.Scene();
+
+			camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 0.01, 1e10 );
+			camera.position.z = 0.2;
+
+
+			scene.add( camera );
+
+			controls = new THREE.TrackballControls( camera );
+
+			controls.rotateSpeed = 5.0;
+			controls.zoomSpeed = 5;
+			controls.panSpeed = 2;
+
+			controls.noZoom = false;
+			controls.noPan = false;
+
+			controls.staticMoving = true;
+			controls.dynamicDampingFactor = 0.3;
+
+			// light
+
+			var dirLight = new THREE.DirectionalLight( 0xffffff );
+			dirLight.position.set( 200, 200, 1000 ).normalize();
+			camera.add( dirLight );
+			camera.add( dirLight.target );
+
+			// renderer
+
+			renderer = new THREE.WebGLRenderer( { antialias: false } );
+			renderer.setClearColorHex( 0x000000, 1 );
+			renderer.setSize( window.innerWidth, window.innerHeight );
+
+			container = document.createElement( 'div' );
+			document.body.appendChild( container );
+			container.appendChild( renderer.domElement );
+
+			stats = new Stats();
+			stats.domElement.style.position = 'absolute';
+			stats.domElement.style.top = '0px';
+			container.appendChild( stats.domElement );
+
+
+			var material =  new THREE.MeshLambertMaterial( { color:0xffffff} );
+
+			var loader=new THREE.VTKLoader2();
+			loader.load ("models/vtk/bunny.vtk", function(geom){
+				var mesh = new THREE.Mesh(geom, material );
+				mesh.doubleSided=true;
+				mesh.position.setY(-0.09);
+				scene.add( mesh );
+				animate();
+				});
+
+			function animate() {
+
+				requestAnimationFrame( animate );
+				controls.update();
+				renderer.render( scene, camera );
+				stats.update();
+
+			}
+		</script>
+
+	</body>
+</html>