Explorar el Código

Pump COLLADA keyframe example contributed by the kuda project.

John Pywtorak hace 13 años
padre
commit
a2eeb8fcf6

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 324 - 0
examples/models/pump.dae


BIN
examples/models/pump_body.jpg


BIN
examples/models/pump_gears.jpg


BIN
examples/models/pump_metalreflect.jpg


+ 227 - 0
examples/webgl_loader_collada_keyframe.html

@@ -0,0 +1,227 @@
+<!doctype html>
+<html lang="en">
+	<head>
+		<title>three.js webgl - collada</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: #000000;
+				margin: 0px;
+				overflow: hidden;
+			}
+
+			#info {
+				color: #fff;
+				position: absolute;
+				top: 10px;
+				width: 100%;
+				text-align: center;
+				z-index: 100;
+				display:block;
+
+			}
+
+			a { color: skyblue }
+
+		</style>
+	</head>
+	<body>
+		<div id="info">
+			<a href="http://github.com/mrdoob/three.js" target="_blank">three.js</a> -
+			pump by <a href="http://code.google.com/p/kuda" target="_blank">Kuda</a>
+		</div>
+
+		<script src="../build/Three.js"></script>
+
+		<script src="js/Detector.js"></script>
+
+		<script src="js/Stats.js"></script>
+
+		<script>
+
+			if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
+
+			var container,
+				stats,
+				camera,
+				scene,
+				renderer,
+				pointLight,
+				model,
+				animations,
+				kfAnimations = [ ],
+				loader = new THREE.ColladaLoader(),
+				lastTimestamp,
+				startTime,
+				progress = 0;
+
+			loader.load( './models/pump.dae', function( collada ) {
+
+				model = collada.scene;
+				animations = collada.animations;
+
+				model.scale.x = model.scale.y = model.scale.z = 0.125;
+				model.updateMatrix();
+
+				init();
+				start();
+				animate( lastTimestamp );
+
+			} );
+
+			function init() {
+
+				container = document.createElement( 'div' );
+				document.body.appendChild( container );
+
+				model.getChildByName( 'camEye_camera', true ).visible = false;
+				model.getChildByName( 'camTarget_camera', true ).visible = false;
+
+				scene = new THREE.Scene();
+
+				camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 0.01, 1000 );
+				camera.position.set( -5.00181875, 3.42631375, 11.3102925 );
+				camera.lookAt( new THREE.Vector3( -1.224774125, 2.18410625, 4.57969125 ) );
+
+				scene.add( camera );
+
+				// KeyFrame Animations
+
+				var animHandler = THREE.AnimationHandler,
+					toConvert = { };
+
+				for ( var i = 0, il = animations.length; i < il; ++i ) {
+					var node = animations[ i ].node;
+					toConvert[ node.id ] = node;
+				}
+
+				for ( var i = 0, il = animations.length; i < il; ++i ) {
+					var animation = animations[ i ];
+					animHandler.add( animation );
+
+					var kfAnimation = new THREE.KeyFrameAnimation( toConvert[ animation.node.id ], animation.name );
+					kfAnimation.timeScale = 1;
+					kfAnimations.push( kfAnimation );
+				}
+
+				// Grid
+
+				var line_material = new THREE.LineBasicMaterial( { color: 0xcccccc, opacity: 0.2 } ),
+					geometry = new THREE.Geometry(),
+					floor = -0.04, step = 1, size = 14;
+
+				for ( var i = 0; i <= size / step * 2; i ++ ) {
+
+					geometry.vertices.push( new THREE.Vertex( new THREE.Vector3( - size, floor, i * step - size ) ) );
+					geometry.vertices.push( new THREE.Vertex( new THREE.Vector3(   size, floor, i * step - size ) ) );
+					geometry.vertices.push( new THREE.Vertex( new THREE.Vector3( i * step - size, floor, -size ) ) );
+					geometry.vertices.push( new THREE.Vertex( new THREE.Vector3( i * step - size, floor,  size ) ) );
+
+				}
+
+				var line = new THREE.Line( geometry, line_material, THREE.LinePieces );
+				scene.add( line );
+
+				// Add the COLLADA
+
+				scene.add( model );
+
+				// Lights
+
+				pointLight = new THREE.PointLight( 0xffffff, 1.5 );
+				pointLight.position = camera.position;
+				pointLight.rotation = camera.rotation;
+				pointLight.scale = camera.scale;
+				scene.add( pointLight );
+
+				// Renderer
+
+				renderer = new THREE.WebGLRenderer();
+				renderer.setSize( window.innerWidth, window.innerHeight );
+				container.appendChild( renderer.domElement );
+
+				// Stats
+
+				stats = new Stats();
+				stats.domElement.style.position = 'absolute';
+				stats.domElement.style.top = '0px';
+				container.appendChild( stats.domElement );
+
+			}
+
+			function start() {
+
+                for ( var i = 0, il = kfAnimations.length; i < il; ++i ) {
+
+                    var animation = kfAnimations[i];
+
+                    for ( var h = 0, hl = animation.hierarchy.length; h < hl; h++ ) {
+
+                        var keys = animation.data.hierarchy[ h ].keys,
+                            sids = animation.data.hierarchy[ h ].sids,
+                            obj = animation.hierarchy[ h ];
+
+                        if ( keys.length && sids ) {
+
+                            for ( var s = 0; s < sids.length; s++ ) {
+
+                                var sid = sids[ s ],
+                                    next = animation.getNextKeyWith( sid, h, 0 );
+
+                                if ( next ) {
+                                    next.apply( sid );
+                                }
+                            }
+
+                            obj.matrixAutoUpdate = false;
+                            animation.data.hierarchy[ h ].node.updateMatrix();
+                            obj.matrixWorldNeedsUpdate = true;
+
+                        }
+
+                    }
+
+                    animation.play( false, 0 );
+					lastTimestamp = Date.now();
+
+                }
+			}
+
+			function animate( timestamp ) {
+
+				var frameTime = ( timestamp - lastTimestamp ) * 0.001; // seconds
+
+				if ( progress >= 0 && progress < 48 ) {
+
+			            for ( var i = 0, il = kfAnimations.length; i < il; ++i ) {
+
+			                kfAnimations[ i ].update( frameTime );
+
+			            }
+
+                } else if ( progress >= 48 ) {
+
+	                for ( var i = 0, il = kfAnimations.length; i < il; ++i ) {
+
+	                    kfAnimations[ i ].stop();
+
+	                }
+
+	                progress = 0;
+	                start();
+                }
+
+				progress += frameTime;
+				lastTimestamp = timestamp;
+				renderer.render( scene, camera );
+				stats.update();
+				requestAnimationFrame( animate );
+
+			}
+
+		</script>
+	</body>
+</html>

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio