Browse Source

Pump COLLADA keyframe example contributed by the kuda project.

John Pywtorak 13 năm trước cách đây
mục cha
commit
a2eeb8fcf6

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 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>

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác