Browse Source

added buffergeometry morph example

Lewy Blue 6 years ago
parent
commit
d8bc641b68
2 changed files with 187 additions and 0 deletions
  1. 1 0
      examples/files.js
  2. 186 0
      examples/webgl_buffergeometry_morphtargets.html

+ 1 - 0
examples/files.js

@@ -289,6 +289,7 @@ var files = {
 		"webgl_buffergeometry_instancing_lambert",
 		"webgl_buffergeometry_lines",
 		"webgl_buffergeometry_lines_indexed",
+		"webgl_buffergeometry_morphtargets",
 		"webgl_buffergeometry_points",
 		"webgl_buffergeometry_points_interleaved",
 		"webgl_buffergeometry_rawshader",

+ 186 - 0
examples/webgl_buffergeometry_morphtargets.html

@@ -0,0 +1,186 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<title>three.js webgl - buffergeometry - morph targets</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 {
+				margin: 0px;
+				overflow: hidden;
+				text-align: center;
+			}
+
+			#info {
+				color: #fff;
+				position: absolute;
+				top: 10px;
+				width: 100%;
+			}
+
+		</style>
+	</head>
+
+	<body>
+		<div id="container"></div>
+		<div id="info">
+			<a href="http://threejs.org" target="_blank" rel="noopener">three.js</a> - buffergeometry - morph targets
+		</div>
+
+		<script src="../build/three.js"></script>
+
+		<script src="js/controls/OrbitControls.js"></script>
+		<script src="js/WebGL.js"></script>
+		<script src="js/libs/dat.gui.min.js"></script>
+
+		<script>
+
+			var container, camera, scene, renderer, mesh;
+
+			function init() {
+
+				if ( WEBGL.isWebGLAvailable() === false ) {
+
+					document.body.appendChild( WEBGL.getWebGLErrorMessage() );
+					return false;
+
+				}
+
+				container = document.getElementById( 'container' );
+				camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 20 );
+				camera.position.z = 10;
+
+				var controls = new THREE.OrbitControls( camera, container );
+
+				scene = new THREE.Scene();
+				scene.background = new THREE.Color( 0x8FBCD4 );
+				var pointLight = new THREE.PointLight( 0xffffff, 1 );
+				camera.add( pointLight );
+				scene.add( camera );
+
+				var geometry = createGeometry();
+
+				var material = new THREE.MeshPhongMaterial( { flatShading: true, color: 0xff0000, morphTargets: true } );
+
+				mesh = new THREE.Mesh( geometry, material );
+				scene.add( mesh );
+
+				initGUI();
+
+				renderer = new THREE.WebGLRenderer( { antialias: true } );
+				renderer.setPixelRatio( window.devicePixelRatio );
+				renderer.setSize( window.innerWidth, window.innerHeight );
+
+				renderer.setAnimationLoop( function () {
+
+					renderer.render( scene, camera );
+
+				} );
+
+				container.appendChild( renderer.domElement );
+
+
+				window.addEventListener( 'resize', onWindowResize, false );
+
+			}
+
+			function createGeometry() {
+
+				var geometry = new THREE.BufferGeometry();
+
+				// 2 x 2 cube centered at (0, 0, 0) defined by 8 corner vertices
+				var positions = [
+					- 1, - 1, 1, // front bottom left
+					1, - 1, 1, // front bottom right
+					- 1, 1, 1, // front top left
+					1, 1, 1, // front top right
+					- 1, - 1, - 1, // back bottom left
+					1, - 1, - 1, // back bottom right
+					- 1, 1, - 1, // back top left
+					1, 1, - 1, // back top right
+				];
+				geometry.addAttribute( 'position', new THREE.Float32BufferAttribute( positions, 3 ) );
+
+				// each face consists of two triangles
+				var indices = [
+					2, 0, 1, 1, 3, 2, // front
+					4, 6, 5, 6, 7, 5, // back
+					2, 3, 6, 3, 7, 6, // top
+					0, 4, 5, 5, 1, 0, // bottom
+					0, 6, 4, 6, 0, 2, // left
+					1, 5, 3, 3, 5, 7 // right
+				];
+				geometry.setIndex( indices );
+
+				// create an empty array to  hold targets for the attribute we want to morph
+				// morphing positions and normals is supported
+				geometry.morphAttributes.position = [];
+
+				// squash
+				var morphTargetPositions0 = [
+					- 1.25, - 1, 1.25,
+					1.25, - 1, 1.25,
+					- 1.25, 0.5, 1.25,
+					1.25, 0.5, 1.25,
+					- 1.25, - 1, - 1.25,
+					1.25, - 1, - 1.25,
+					- 1.25, 0.5, - 1.25,
+					1.25, 0.5, - 1.25,
+				];
+				geometry.morphAttributes.position[ 0 ] = new THREE.Float32BufferAttribute( morphTargetPositions0, 3 );
+
+				// lean
+				var morphTargetPositions1 = [
+					- 1, - 1, 1,
+					1, - 1, 1,
+					- 1.5, 1, 1,
+					0.5, 1, 1,
+					- 1, - 1, - 1,
+					1, - 1, - 1,
+					- 1.5, 1, - 1,
+					0.5, 1, - 1,
+				];
+				geometry.morphAttributes.position[ 1 ] = new THREE.Float32BufferAttribute( morphTargetPositions1, 3 );
+
+				return geometry;
+
+			}
+
+			function initGUI() {
+
+				// Set up dat.GUI to control targets
+				var params = {
+					squash: 0,
+					lean: 0,
+				};
+				var gui = new dat.GUI();
+				var folder = gui.addFolder( 'Morph Targets' );
+
+				folder.add( params, 'squash', 0, 1 ).step( 0.01 ).onChange( function ( value ) {
+
+					mesh.morphTargetInfluences[ 0 ] = value;
+
+				} );
+				folder.add( params, 'lean', 0, 1 ).step( 0.01 ).onChange( function ( value ) {
+
+					mesh.morphTargetInfluences[ 1 ] = value;
+
+				} );
+
+				folder.open();
+
+			}
+
+			function onWindowResize() {
+
+				camera.aspect = window.innerWidth / window.innerHeight;
+				camera.updateProjectionMatrix();
+				renderer.setSize( window.innerWidth, window.innerHeight );
+
+			}
+
+			init();
+		</script>
+
+	</body>
+</html>