Quellcode durchsuchen

Examples: Update keyframes example to LittlestTokyo.glb.

Don McCurdy vor 7 Jahren
Ursprung
Commit
8187e68f10
2 geänderte Dateien mit 161 neuen und 0 gelöschten Zeilen
  1. BIN
      examples/models/gltf/LittlestTokyo.glb
  2. 161 0
      examples/webgl_animation_keyframes.html

BIN
examples/models/gltf/LittlestTokyo.glb


+ 161 - 0
examples/webgl_animation_keyframes.html

@@ -0,0 +1,161 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<title>three.js webgl - animation - keyframes</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;
+				font-size:13px;
+				text-align:center;
+				background-color: #fff;
+				margin: 0px;
+				overflow: hidden;
+			}
+			#info {
+				position: absolute;
+				top: 0px; width: 100%;
+				padding: 5px;
+			}
+			#info p {
+				max-width: 600px;
+				margin-left: auto;
+				margin-right: auto;
+				padding: 0 2em;
+			}
+			a {
+				color: #2983ff;
+			}
+		</style>
+	</head>
+
+	<body>
+
+		<div id="container"></div>
+
+		<div id="info">
+			<a href="http://threejs.org" target="_blank" rel="noopener">three.js</a> webgl - animation - keyframes
+			<p>
+				Model: <a href="https://sketchfab.com/models/94b24a60dc1b48248de50bf087c0f042" target="_blank" rel="noopener">Littlest Tokyo</a> by
+				<a href="https://sketchfab.com/glenatron" target="_blank" rel="noopener">glenatron</a>, CC Attribution.
+			</p>
+		</div>
+
+		<script src="../build/three.js"></script>
+
+		<script src="js/Detector.js"></script>
+		<script src="js/libs/stats.min.js"></script>
+		<script src="js/libs/dat.gui.min.js"></script>
+		<script src="js/controls/OrbitControls.js"></script>
+		<script src="js/loaders/DRACOLoader.js"></script>
+		<script src="js/loaders/GLTFLoader.js"></script>
+
+		<script>
+
+			var scene, camera, pointLight, stats;
+			var renderer, mixer, controls;
+
+			var clock = new THREE.Clock();
+			var container = document.getElementById( 'container' );
+
+			stats = new Stats();
+			container.appendChild( stats.dom );
+
+			renderer = new THREE.WebGLRenderer( { antialias: true } );
+			renderer.setPixelRatio( window.devicePixelRatio );
+			renderer.setSize( window.innerWidth, window.innerHeight );
+			renderer.gammaOutput = true;
+			renderer.gammaFactor = 2.2;
+			container.appendChild( renderer.domElement );
+
+			var state = {color: 0xbfe3dd};
+
+			scene = new THREE.Scene();
+			scene.background = new THREE.Color( 0xbfe3dd );
+
+			// TODO: Remove GUI when colors are set.
+			var gui = new dat.GUI();
+			gui.addColor( state, 'color' ).onChange( () => scene.background.setHex( state.color ) );
+			gui.close();
+
+			camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 100 );
+			camera.position.set( 5, 2, 8 );
+
+			controls = new THREE.OrbitControls( camera, renderer.domElement );
+			controls.target.set( 0, 0.5, 0 );
+
+			scene.add( new THREE.AmbientLight( 0x404040 ) );
+
+			pointLight = new THREE.PointLight( 0xffffff, 1 );
+			pointLight.position.copy( camera.position );
+			scene.add( pointLight );
+
+			// envmap
+			var path = 'textures/cube/Park2/';
+			var format = '.jpg';
+			var envMap = new THREE.CubeTextureLoader().load( [
+				path + 'posx' + format, path + 'negx' + format,
+				path + 'posy' + format, path + 'negy' + format,
+				path + 'posz' + format, path + 'negz' + format
+			] );
+
+			THREE.DRACOLoader.setDecoderPath( 'js/libs/draco/gltf/' );
+
+			var loader = new THREE.GLTFLoader();
+			loader.setDRACOLoader( new THREE.DRACOLoader() );
+			loader.load( 'models/gltf/LittlestTokyo.glb', function ( gltf ) {
+
+				var model = gltf.scene;
+				model.position.set( 1, 1, 0 );
+				model.scale.set( 0.01, 0.01, 0.01 );
+				model.traverse( function ( child ) {
+
+					if ( child.isMesh ) child.material.envMap = envMap;
+
+				} );
+
+				scene.add( model );
+
+				mixer = new THREE.AnimationMixer( model );
+				mixer.clipAction( gltf.animations[ 0 ] ).play();
+
+				animate();
+
+			}, undefined, function ( e ) {
+
+				console.error( e );
+
+			} );
+
+
+			window.onresize = function () {
+
+				camera.aspect = window.innerWidth / window.innerHeight;
+				camera.updateProjectionMatrix();
+
+				renderer.setSize( window.innerWidth, window.innerHeight );
+
+			};
+
+
+			function animate() {
+
+				requestAnimationFrame( animate );
+
+				var delta = clock.getDelta();
+				mixer.update( delta );
+				controls.update( delta );
+
+				stats.update();
+
+				renderer.render( scene, camera );
+
+			}
+
+
+		</script>
+
+	</body>
+
+</html>