Browse Source

sea3d revision 2

Jean Carlo Deconto 10 years ago
parent
commit
5eb7b3a42a

+ 1 - 0
examples/index.html

@@ -266,6 +266,7 @@
 				"webgl_loader_sea3d",
 				"webgl_loader_sea3d_hierarchy",
 				"webgl_loader_sea3d_keyframe",
+				"webgl_loader_sea3d_morph",
 				"webgl_loader_sea3d_skinning",
 				"webgl_loader_sea3d_sound",
 				"webgl_loader_scene",

File diff suppressed because it is too large
+ 408 - 350
examples/js/loaders/sea3d/SEA3DLoader.js


BIN
examples/models/sea3d/sound.sea


+ 14 - 16
examples/webgl_loader_sea3d.html

@@ -33,7 +33,7 @@
 
 		<script src="../build/three.min.js"></script>
 
-		<script src="js/controls/TrackballControls.js"></script>
+		<script src="js/controls/OrbitControls.js"></script>
 
 		<script src="js/postprocessing/EffectComposer.js"></script>
 		<script src="js/postprocessing/RenderPass.js"></script>
@@ -101,14 +101,11 @@
 				container = document.createElement( 'div' );
 				document.body.appendChild( container );
 
-				camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 2000 );
+				camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 10000 );
 				camera.position.set( 1000, - 300, 1000 );
 
-				controls = new THREE.TrackballControls( camera, document );
-				controls.noZoom = true;
-				controls.noPan = true;
-				controls.dynamicDampingFactor = 0.05;
-
+				controls = new THREE.OrbitControls( camera );
+				
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
@@ -164,28 +161,29 @@
 
 			//
 
+			var clock = new THREE.Clock();
+
 			function animate() {
 
+				var delta = clock.getDelta();
+				
 				requestAnimationFrame( animate );
 
+				// update Three.JS+SEA3D animation
+				THREE.SEA3D.AnimationHandler.update( delta );
+				
 				controls.update();
 
-				render();
+				render( delta );
 
 				stats.update();
 
 			}
 
-			var clock = new THREE.Clock();
-
-			function render() {
-
-				var delta = clock.getDelta();
-
-				THREE.AnimationHandler.update( delta );
+			function render( dlt ) {
 
 				//renderer.render( scene, camera );
-				composer.render( delta );
+				composer.render( dlt );
 
 			}
 

+ 12 - 14
examples/webgl_loader_sea3d_hierarchy.html

@@ -33,7 +33,7 @@
 
 		<script src="../build/three.min.js"></script>
 
-		<script src="js/controls/TrackballControls.js"></script>
+		<script src="js/controls/OrbitControls.js"></script>
 
 		<script src="js/postprocessing/EffectComposer.js"></script>
 		<script src="js/postprocessing/RenderPass.js"></script>
@@ -113,7 +113,7 @@
 				camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 2000 );
 				camera.position.set( 1000, - 300, 1000 );
 
-				controls = new THREE.TrackballControls( camera, document );
+				controls = new THREE.OrbitControls( camera );
 				controls.noZoom = true;
 				controls.noPan = true;
 				controls.dynamicDampingFactor = 0.05;
@@ -169,31 +169,29 @@
 
 			//
 
+			var clock = new THREE.Clock();
+
 			function animate() {
 
+				var delta = clock.getDelta();
+				
 				requestAnimationFrame( animate );
 
+				// update Three.JS+SEA3D animation
+				THREE.SEA3D.AnimationHandler.update( delta );
+				
 				controls.update();
 
-				render();
+				render( delta );
 
 				stats.update();
 
 			}
 
-			var clock = new THREE.Clock();
+			function render( dlt ) {
 
-			function render() {
-
-				var delta = clock.getDelta();
-
-				THREE.AnimationHandler.update( delta );
-
-				// SEA3D Keyframe Update		
-				SEA3D.AnimationHandler.update( delta ); 
-				
 				//renderer.render( scene, camera );
-				composer.render( delta );
+				composer.render( dlt );
 
 			}
 

+ 15 - 18
examples/webgl_loader_sea3d_keyframe.html

@@ -34,7 +34,7 @@
 
 		<script src="../build/three.min.js"></script>
 
-		<script src="js/controls/TrackballControls.js"></script>
+		<script src="js/controls/OrbitControls.js"></script>
 
 		<script src="js/postprocessing/EffectComposer.js"></script>
 		<script src="js/postprocessing/RenderPass.js"></script>
@@ -148,10 +148,7 @@
 				camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 2000 );
 				camera.position.set( 1000, - 300, 1000 );
 
-				controls = new THREE.TrackballControls( camera, document );
-				controls.noZoom = true;
-				controls.noPan = true;
-				controls.dynamicDampingFactor = 0.05;
+				controls = new THREE.OrbitControls( camera );
 
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
@@ -278,32 +275,32 @@
 						break;							
 				}
 			}
-			
+
+			//
+
+			var clock = new THREE.Clock();
+
 			function animate() {
 
+				var delta = clock.getDelta();
+				
 				requestAnimationFrame( animate );
 
+				// update Three.JS+SEA3D animation
+				THREE.SEA3D.AnimationHandler.update( delta );
+				
 				controls.update();
 
-				render();
+				render( delta );
 
 				stats.update();
 
 			}
 
-			var clock = new THREE.Clock();
-
-			function render() {
-
-				var delta = clock.getDelta();
-
-				THREE.AnimationHandler.update( delta );
-
-				// SEA3D Keyframe Update		
-				SEA3D.AnimationHandler.update( delta ); 
+			function render( dlt ) {
 
 				//renderer.render( scene, camera );
-				composer.render( delta );
+				composer.render( dlt );
 
 			}
 

+ 207 - 0
examples/webgl_loader_sea3d_morph.html

@@ -0,0 +1,207 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<title>three.js webgl - sea3d / morph</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;
+				margin: 0px;
+				overflow: hidden;
+			}
+
+			#info {
+				color: #fff;
+				position: absolute;
+				top: 10px;
+				width: 100%;
+				text-align: center;
+				z-index: 100;
+				display:block;
+
+			}
+
+			a { color: white }
+		</style>
+	</head>
+	<body>
+		<div id="info">
+			<a href="http://threejs.org" target="_blank">three.js</a> - model by <a href="https://github.com/sunag/sea3d" style="color:#FFFFF" target="_blank">sea3d</a>
+		</div>
+
+		<script src="../build/three.min.js"></script>
+
+		<script src="js/controls/OrbitControls.js"></script>
+
+		<script src="js/postprocessing/EffectComposer.js"></script>
+		<script src="js/postprocessing/RenderPass.js"></script>
+		<script src="js/postprocessing/ShaderPass.js"></script>
+		<script src="js/postprocessing/MaskPass.js"></script> 
+		<script src="js/shaders/CopyShader.js"></script>
+		<script src="js/shaders/ColorCorrectionShader.js"></script>
+		<script src="js/shaders/VignetteShader.js"></script>
+		
+		<script src="js/loaders/sea3d/SEA3D.js"></script>
+		<script src="js/loaders/sea3d/SEA3DLZMA.js"></script>
+		<script src="js/loaders/sea3d/SEA3DLoader.js"></script>
+
+		<script src="js/Detector.js"></script>
+		<script src="js/libs/stats.min.js"></script>
+
+		<script>
+
+			if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
+
+			var container, stats;
+
+			var camera, scene, renderer, composer, controls, teapot;
+
+			var loader;
+
+			// Initialize Three.JS
+
+			init(); 
+
+			//
+			// SEA3D Loader
+			//
+
+			loader = new THREE.SEA3D( {
+
+				autoPlay : true, // Auto play animations
+				container : scene, // Container to add models
+				parser : THREE.SEA3D.DEFAULT, // Auto choose THREE.BufferGeometry and THREE.Geometry
+				multiplier : 1 // Light multiplier
+
+			} );
+
+			loader.onComplete = function( e ) {
+
+				// Get the first camera from 3ds Max
+				// use loader.get... to get others objects
+
+				var cam = loader.cameras[0];
+				camera.position.copy( cam.position );
+				camera.rotation.copy( cam.rotation );
+
+				// get mesh
+				teapot = loader.getMesh("Teapot01");
+				
+				// events
+				
+				window.addEventListener( 'mousemove', onMouseMove, false );
+				
+				animate();
+
+			};
+
+			loader.load( './models/sea3d/morph.sea' );
+
+			//
+
+			function init() {
+
+				scene = new THREE.Scene();
+
+				container = document.createElement( 'div' );
+				document.body.appendChild( container );
+
+				camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 2000 );
+				camera.position.set( 1000, - 300, 1000 );
+
+				controls = new THREE.OrbitControls( camera );
+
+				renderer = new THREE.WebGLRenderer();
+				renderer.setPixelRatio( window.devicePixelRatio );
+				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setClearColor( 0x333333, 1 );
+				container.appendChild( renderer.domElement );
+
+				stats = new Stats();
+				stats.domElement.style.position = 'absolute';
+				stats.domElement.style.top = '0px';
+				container.appendChild( stats.domElement );
+
+				// post-processing
+
+				composer = new THREE.EffectComposer( renderer );
+
+				var renderPass = new THREE.RenderPass( scene, camera );
+				var copyPass = new THREE.ShaderPass( THREE.CopyShader );
+				composer.addPass( renderPass );
+
+				var vh = 1.4, vl = 1.2;
+
+				var colorCorrectionPass = new THREE.ShaderPass( THREE.ColorCorrectionShader );
+				colorCorrectionPass.uniforms[ "powRGB" ].value = new THREE.Vector3( vh, vh, vh );
+				colorCorrectionPass.uniforms[ "mulRGB" ].value = new THREE.Vector3( vl, vl, vl );
+				composer.addPass( colorCorrectionPass );
+
+				var vignettePass = new THREE.ShaderPass( THREE.VignetteShader );
+				vignettePass.uniforms[ "darkness" ].value = 1.0;
+				composer.addPass( vignettePass );
+
+				composer.addPass( copyPass );
+				copyPass.renderToScreen = true;
+
+				// extra lights
+
+				scene.add( new THREE.AmbientLight( 0x333333 ) );
+
+				// events
+
+				window.addEventListener( 'resize', onWindowResize, false );
+
+			}
+
+			function onMouseMove( e ) {
+
+				var mouseX = e.clientX,
+					mouseY = e.clientY;
+
+				// change morph weight: 0 at 1
+				// names from modifier Morph of 3ds Max
+				teapot.setWeight("OldTeapot", mouseX / window.innerWidth);
+				teapot.setWeight("Sphere", mouseY / window.innerHeight);
+
+			}
+			
+			function onWindowResize() {
+
+				camera.aspect = window.innerWidth / window.innerHeight;
+				camera.updateProjectionMatrix();
+
+				renderer.setSize( window.innerWidth, window.innerHeight );
+
+			}
+
+			//
+
+			var clock = new THREE.Clock();
+
+			function animate() {
+
+				var delta = clock.getDelta();
+				
+				requestAnimationFrame( animate );
+
+				controls.update();
+
+				render( delta );
+
+				stats.update();
+
+			}
+
+			function render( dlt ) {
+
+				//renderer.render( scene, camera );
+				composer.render( dlt );
+
+			}
+
+		</script>
+	</body>
+</html>

+ 16 - 17
examples/webgl_loader_sea3d_skinning.html

@@ -35,7 +35,7 @@
 
 		<script src="../build/three.min.js"></script>
 
-		<script src="js/controls/TrackballControls.js"></script>
+		<script src="js/controls/OrbitControls.js"></script>
 
 		<script src="js/postprocessing/EffectComposer.js"></script>
 		<script src="js/postprocessing/RenderPass.js"></script>
@@ -90,13 +90,14 @@
 
 				// get meshes
 				player = loader.getMesh("Player");
+
 				hat = loader.getMesh("Hat");
-				
+
 				// events
-				
+
 				window.addEventListener( 'click', onMouseClick, false );
 				window.addEventListener( 'contextmenu', onRightClick, false );
-				
+
 				animate();
 
 			};
@@ -115,10 +116,7 @@
 				camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 2000 );
 				camera.position.set( 1000, - 300, 1000 );
 
-				controls = new THREE.TrackballControls( camera, document );
-				controls.noZoom = true;
-				controls.noPan = true;
-				controls.dynamicDampingFactor = 0.05;
+				controls = new THREE.OrbitControls( camera );				
 
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
@@ -195,28 +193,29 @@
 
 			//
 
+			var clock = new THREE.Clock();
+
 			function animate() {
 
+				var delta = clock.getDelta();
+				
 				requestAnimationFrame( animate );
 
+				// update Three.JS+SEA3D animation
+				THREE.SEA3D.AnimationHandler.update( delta );
+				
 				controls.update();
 
-				render();
+				render( delta );
 
 				stats.update();
 
 			}
 
-			var clock = new THREE.Clock();
-
-			function render() {
-
-				var delta = clock.getDelta();
-
-				THREE.AnimationHandler.update( delta );
+			function render( dlt ) {
 
 				//renderer.render( scene, camera );
-				composer.render( delta );
+				composer.render( dlt );
 
 			}
 

+ 55 - 13
examples/webgl_loader_sea3d_sound.html

@@ -103,7 +103,7 @@
 
 			if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
 
-			var container, stats;
+			var container, raycaster, stats;
 
 			var camera, scene, renderer, composer, controls, velocity;
 			var blocker, instructions;
@@ -112,6 +112,8 @@
 			initKeyDown
 			
 			var loader;
+			var audioListener, soundFilter;			
+			var soundArea, collisionArea;
 
 			// Initialize Three.JS
 
@@ -133,7 +135,17 @@
 			} );
 
 			loader.onComplete = function( e ) {
-				
+
+				audioListener = loader.audioListener;
+
+				soundFilter = audioListener.context.createBiquadFilter();
+				soundFilter.type = 'lowpass';
+				soundFilter.Q.value = 10;
+				soundFilter.frequency.value = 440;	
+
+				soundArea = loader.getSound3D("Point002");
+				collisionArea = loader.getMesh("Torus003");
+
 				animate();
 
 			};
@@ -302,6 +314,8 @@
 			
 			function init() {
 
+				raycaster = new THREE.Raycaster();
+
 				scene = new THREE.Scene();
 				velocity = new THREE.Vector3();
 				
@@ -386,12 +400,50 @@
 				controls.getObject().translateZ( velocity.z * delta );
 
 			}
-			
+
+			var clock = new THREE.Clock();
+			var audioPos = new THREE.Vector3();			
+			var audioRot = new THREE.Euler();
+
+			function updateSoundFilter( collision, sound3d ) {
+
+				// difference position between sound and listener
+				var difPos = new THREE.Vector3().setFromMatrixPosition( sound3d.matrixWorld ).sub(audioPos);	
+				var length = difPos.length();
+
+				// pick a vector from camera to sound
+				raycaster.set( audioPos, difPos.normalize() );
+
+				// intersecting sound1
+				if ( length > 50 && raycaster.intersectObjects( [collision] ).length ) {
+
+					if ( sound3d.getFilter() !== soundFilter ) sound3d.setFilter( soundFilter );
+
+				} else if ( sound3d.getFilter() !== undefined ) {
+
+					sound3d.setFilter();
+
+				}
+
+			}
+
+			//
+
 			function animate() {
 
 				var delta = clock.getDelta();
 				
 				animateCamera( delta );
+
+				// Sound3D Spatial Transform Update
+				loader.audioListener.position.copy( audioPos.setFromMatrixPosition( camera.matrixWorld ) );
+				loader.audioListener.rotation.copy( audioRot.setFromRotationMatrix( camera.matrixWorld ) );
+				
+				// Update sound filter from raycaster intersecting				
+				updateSoundFilter( collisionArea, soundArea );
+				
+				// SEA3D Keyframe Update		
+				SEA3D.AnimationHandler.update( delta ); 
 				
 				render( delta );
 
@@ -401,18 +453,8 @@
 
 			}
 
-			var clock = new THREE.Clock();
-
 			function render( delta ) {
 
-				THREE.AnimationHandler.update( delta );
-
-				// SEA3D Keyframe Update		
-				SEA3D.AnimationHandler.update( delta ); 
-
-				// Sound Update
-				THREE.Sound3D.update( camera );
-
 				//renderer.render( scene, camera );
 				composer.render( delta );
 

Some files were not shown because too many files changed in this diff