Browse Source

Updated WebVR examples using WebVR.js.

Mr.doob 9 years ago
parent
commit
24127b9cf0
4 changed files with 96 additions and 199 deletions
  1. 35 87
      examples/webvr_cubes.html
  2. 8 4
      examples/webvr_rollercoaster.html
  3. 36 107
      examples/webvr_stereo_pano.html
  4. 17 1
      examples/webvr_video.html

+ 35 - 87
examples/webvr_cubes.html

@@ -7,56 +7,38 @@
 		<style>
 			body {
 				font-family: Monospace;
-				background-color: #f0f0f0;
+				background-color: #101010;
+				color: #fff;
 				margin: 0px;
 				overflow: hidden;
 			}
-
-			.menu {
-				position: fixed;
-				bottom: 20px;
-				left: 20px;
-			}
-
-			.button {
-				display: inline-block;
-				padding: 8px;
-				color: #FFF;
-				background-color: #555;
-			}
-
-			.button.enabled {
-				background-color: rgb(18, 140, 36);
-			}
-
-			.button:hover {
-				cursor: pointer;
-				background-color: rgb(18, 36, 70);
-			}
-
-			.button.error {
-				pointer-events: none;
-				background-color: red;
+			a {
+				color: #f00;
 			}
-
 		</style>
 	</head>
 	<body>
-		<div class="menu">
-			<div class="button full-screen">Start VR Mode</div>
-		</div>
 
 		<script src="../build/three.min.js"></script>
+
+		<script src="js/WebVR.js"></script>
 		<script src="js/effects/VREffect.js"></script>
 		<script src="js/controls/VRControls.js"></script>
 		<script src="js/libs/stats.min.js"></script>
 
 		<script>
 
+			if ( WEBVR.isLatestAvailable() === false ) {
+
+				document.body.appendChild( WEBVR.getMessage() );
+
+			}
+
+			//
+
 			var container, stats;
 			var camera, scene, raycaster, renderer;
-			var vrEffect;
-			var vrControls;
+			var effect, controls;
 
 			var cubes = [];
 			var INTERSECTED;
@@ -79,19 +61,21 @@
 				info.innerHTML = '<a href="http://threejs.org" target="_blank">three.js</a> webgl - interactive cubes';
 				container.appendChild( info );
 
-				camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 1, 10000 );
-
 				scene = new THREE.Scene();
 
+				camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 1, 10000 );
+				scene.add( camera );
+
 				crosshair = new THREE.Mesh(
 					new THREE.RingGeometry( 0.5, 1, 32 ),
 					new THREE.MeshBasicMaterial( {
-						color: 0x00bb00,
-						transparent: true,
-						opacity: 0.5
+						color: 0xffffff,
+						opacity: 0.5,
+						transparent: true
 					} )
 				);
-				scene.add( crosshair );
+				crosshair.position.z = - 40;
+				camera.add( crosshair );
 
 				var light = new THREE.DirectionalLight( 0xffffff, 1 );
 				light.position.set( 1, 1, 1 ).normalize();
@@ -99,7 +83,7 @@
 
 				var geometry = new THREE.BoxGeometry( 20, 20, 20 );
 
-				for ( var i = 0; i < 2000; i ++ ) {
+				for ( var i = 0; i < 200; i ++ ) {
 
 					var object = new THREE.Mesh( geometry, new THREE.MeshLambertMaterial( { color: Math.random() * 0xffffff } ) );
 
@@ -123,40 +107,21 @@
 				raycaster = new THREE.Raycaster();
 
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
+				renderer.setClearColor( 0x101010 );
 				renderer.setPixelRatio( window.devicePixelRatio );
+				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.sortObjects = false;
+				container.appendChild( renderer.domElement );
 
-				var fullScreenButton = document.querySelector( '.full-screen' );
-
-				if ( navigator.getVRDisplays === undefined && navigator.getVRDevices === undefined ) {
-
-					fullScreenButton.innerHTML = 'Your browser doesn\'t support WebVR';
-					fullScreenButton.classList.add( 'error' );
+				controls = new THREE.VRControls( camera );
+				effect = new THREE.VREffect( renderer );
 
-				} else {
+				if ( WEBVR.isAvailable() === true ) {
 
-					fullScreenButton.classList.add( 'enabled' );
+					document.body.appendChild( WEBVR.getButton( effect ) );
 
 				}
 
-				vrControls = new THREE.VRControls( camera );
-				vrEffect = new THREE.VREffect( renderer, function ( error ) {
-
-					fullScreenButton.innerHTML = error;
-					fullScreenButton.classList.add( 'error' );
-
-				} );
-
-				fullScreenButton.onclick = function() {
-
-					vrEffect.setFullScreen( true );
-
-				};
-
-				renderer.setClearColor( 0xf0f0f0 );
-				renderer.setSize( window.innerWidth, window.innerHeight );
-				renderer.sortObjects = false;
-				container.appendChild( renderer.domElement );
-
 				stats = new Stats();
 				stats.domElement.style.position = 'absolute';
 				stats.domElement.style.top = '0';
@@ -173,7 +138,7 @@
 				camera.aspect = window.innerWidth / window.innerHeight;
 				camera.updateProjectionMatrix();
 
-				vrEffect.setSize( window.innerWidth, window.innerHeight );
+				effect.setSize( window.innerWidth, window.innerHeight );
 
 			}
 
@@ -216,26 +181,9 @@
 
 				}
 
-				vrControls.update();
-
-				crosshair.quaternion.copy( camera.quaternion );
-				crosshair.position.set( 0, 0, 0 );
-
-				if ( INTERSECTED ) {
-
-					crosshair.translateZ(
-						-scene.position.distanceTo( INTERSECTED.position ) +
-						INTERSECTED.geometry.boundingSphere.radius + 5
-					);
-
-				}
-				else {
-
-					crosshair.translateZ(-40);
-
-				}
+				controls.update();
 
-				vrEffect.render( scene, camera );
+				effect.render( scene, camera );
 
 			}
 

+ 8 - 4
examples/webvr_rollercoaster.html

@@ -28,7 +28,7 @@
 
 		<script>
 
-			if ( WEBVR.isAvailable() === false ) {
+			if ( WEBVR.isLatestAvailable() === false ) {
 
 				document.body.appendChild( WEBVR.getMessage() );
 
@@ -173,10 +173,14 @@
 
 			//
 
-			var effect = new THREE.VREffect( renderer );
 			var controls = new THREE.VRControls( camera );
+			var effect = new THREE.VREffect( renderer );
+
+			if ( WEBVR.isAvailable() === true ) {
 
-			document.body.appendChild( WEBVR.getButton( effect ) );
+				document.body.appendChild( WEBVR.getButton( effect ) );
+
+			}
 
 			//
 
@@ -199,7 +203,7 @@
 			var velocity = 0;
 			var progress = 0;
 
-			var animate = function ( time ) {
+			function animate( time ) {
 
 				requestAnimationFrame( animate );
 

+ 36 - 107
examples/webvr_stereo_pano.html

@@ -12,77 +12,68 @@
 				padding: 0px;
 				overflow: hidden;
 			}
-
-			#VrMode {
-				position: absolute;
-				top: 0;
-				left: 0;
-				margin: 10px;
-				background: black;
-				border: 0;
-				color: #fff;
-				padding: 10px;
-				font-size: 1rem;
-			}
-
 		</style>
 
 	</head>
 	<body>
-		<button id="VrMode">VR MODE</button>
 		<script src="../build/three.min.js"></script>
 		<script src="js/controls/OrbitControls.js"></script>
+
+		<script src="js/WebVR.js"></script>
 		<script src="js/controls/VRControls.js"></script>
 		<script src="js/effects/VREffect.js"></script>
 
 		<script>
 
+		if ( WEBVR.isLatestAvailable() === false ) {
+
+			document.body.appendChild( WEBVR.getMessage() );
+
+		}
+
+		//
+
 		var camera;
-		var vrControls;
-		var effect;
+		var effect, controls;
 		var renderer;
 		var scene;
-		var vrMode = false;
+
+		init();
+		animate();
 
 		function init() {
 
 			renderer = new THREE.WebGLRenderer( { antialias: true } );
-			renderer.setPixelRatio( window.devicePixelRatio ? window.devicePixelRatio : 1 );
+			renderer.setPixelRatio( window.devicePixelRatio );
+			renderer.setSize( window.innerWidth, window.innerHeight );
 			document.body.appendChild( renderer.domElement );
 
 			scene = new THREE.Scene();
 
-			camera = new THREE.PerspectiveCamera( 90, window.innerWidth / window.innerHeight, 1, 10000 );
-			camera.position.z = 0.0001;
-			camera.layers.enable(1);
+			camera = new THREE.PerspectiveCamera( 90, window.innerWidth / window.innerHeight, 0.1, 100 );
+			camera.layers.enable( 1 );
 
+			controls = new THREE.VRControls( camera );
 			effect = new THREE.VREffect( renderer );
 
+			if ( WEBVR.isAvailable() === true ) {
 
-			if ( navigator.getVRDisplays || navigator.getVRDevices ) {
-
-				vrControls = new THREE.VRControls( camera, vrFallback );
-
-			} else {
-
-				vrFallback();
+				document.body.appendChild( WEBVR.getButton( effect ) );
 
 			}
 
-
 			var textures = getTexturesFromAtlasFile( "textures/cube/sun_temple_stripe_stereo.jpg", 12 );
 
-
 			var materials = [];
 
 			for ( var i = 0; i < 6; i ++ ) {
 
-					materials.push( new THREE.MeshBasicMaterial( { map: textures[i] } ) );
+				materials.push( new THREE.MeshBasicMaterial( { map: textures[ i ] } ) );
 
 			}
 
-			var skyBox = new THREE.Mesh( new THREE.CubeGeometry( 1024, 1024, 1024 ), new THREE.MeshFaceMaterial( materials ) );
-			skyBox.applyMatrix( new THREE.Matrix4().makeScale( 1, 1, -1 ) );
+			var skyBox = new THREE.Mesh( new THREE.CubeGeometry( 1, 1, 1 ), new THREE.MeshFaceMaterial( materials ) );
+			skyBox.applyMatrix( new THREE.Matrix4().makeScale( 1, 1, - 1 ) );
 			skyBox.layers.set( 1 );
 			scene.add( skyBox );
 
@@ -91,17 +82,16 @@
 
 			for ( var i = 6; i < 12; i ++ ) {
 
-					materialsR.push( new THREE.MeshBasicMaterial( { map: textures[i] } ) );
+				materialsR.push( new THREE.MeshBasicMaterial( { map: textures[ i ] } ) );
 
 			}
 
-			var skyBoxR = new THREE.Mesh( new THREE.CubeGeometry( 1024, 1024, 1024 ), new THREE.MeshFaceMaterial( materialsR ) );
-			skyBoxR.applyMatrix( new THREE.Matrix4().makeScale( 1, 1, -1 ) );
+			var skyBoxR = new THREE.Mesh( new THREE.CubeGeometry( 1, 1, 1 ), new THREE.MeshFaceMaterial( materialsR ) );
+			skyBoxR.applyMatrix( new THREE.Matrix4().makeScale( 1, 1, - 1 ) );
 			skyBoxR.layers.set( 2 );
 			scene.add( skyBoxR );
 
-			animate();
-			onWindowResize();
+			window.addEventListener( 'resize', onWindowResize, false );
 
 		}
 
@@ -109,9 +99,9 @@
 
 			var textures = [];
 
-			for ( var i=0; i < tilesNum; i++ ) {
+			for ( var i = 0; i < tilesNum; i ++ ) {
 
-				textures[i] = new THREE.Texture();
+				textures[ i ] = new THREE.Texture();
 
 			}
 
@@ -122,15 +112,15 @@
 				var canvas, context;
 				var tileWidth = imageObj.height;
 
-				for ( var i = 0; i < textures.length; i++ ) {
+				for ( var i = 0; i < textures.length; i ++ ) {
 
 					canvas = document.createElement( 'canvas' );
 					context = canvas.getContext( '2d' );
 					canvas.height = tileWidth;
 					canvas.width = tileWidth;
 					context.drawImage( imageObj, tileWidth * i, 0, tileWidth, tileWidth, 0, 0, tileWidth, tileWidth );
-					textures[i].image = canvas
-					textures[i].needsUpdate = true;
+					textures[ i ].image = canvas
+					textures[ i ].needsUpdate = true;
 
 				}
 
@@ -142,86 +132,25 @@
 
 		}
 
-		function vrFallback() {
-
-				vrControls = new THREE.OrbitControls( camera );
-				document.querySelector( '#VrMode' ).style.textDecoration = "line-through";
-
-		}
-
-		function requestFullscreen() {
-
-				effect.setFullScreen( true );
-
-		}
-
 		function onWindowResize() {
 
 			camera.aspect = window.innerWidth / window.innerHeight;
 			camera.updateProjectionMatrix();
 
-			if (vrMode) {
-
-				effect.setSize(window.innerWidth, window.innerHeight);
-
-			} else {
-
-				renderer.setSize(window.innerWidth, window.innerHeight);
-				
-			}
-
-		}
-
-		function onFullscreenChange(e) {
-
-			var fsElement = document.fullscreenElement ||
-				document.mozFullScreenElement ||
-				document.webkitFullscreenElement;
-
-			if ( !fsElement ) {
-
-				vrMode = false;
-
-			} else {
-
-				window.screen.orientation.lock( 'landscape' );
-
-			}
+			effect.setSize( window.innerWidth, window.innerHeight );
 
 		}
 
 		function animate() {
 
-			if ( vrMode ) {
-
-				effect.render( scene, camera );
+			controls.update();
 
-			} else {
-
-				renderer.setViewport( 0, 0, window.innerWidth, window.innerHeight );
-				renderer.render( scene, camera );
-
-			}
+			effect.render( scene, camera );
 
-			vrControls.update();
 			requestAnimationFrame( animate );
 
 		}
 
-		document.querySelector( '#VrMode' ).addEventListener( 'click', function() {
-
-			vrMode = vrMode ? false : true;
-			requestFullscreen();
-			onWindowResize();
-
-		} );
-
-		document.addEventListener( 'fullscreenchange', onFullscreenChange );
-		document.addEventListener( 'mozfullscreenchange', onFullscreenChange );
-		window.addEventListener( 'resize', onWindowResize, false );
-
-		init();
-
 		</script>
 	</body>
 </html>

+ 17 - 1
examples/webvr_video.html

@@ -31,11 +31,21 @@
 		</div>
 
 		<script src="../build/three.min.js"></script>
+
+		<script src="js/WebVR.js"></script>
 		<script src="js/effects/VREffect.js"></script>
 		<script src="js/controls/VRControls.js"></script>
 
 		<script>
 
+			if ( WEBVR.isLatestAvailable() === false ) {
+
+				document.body.appendChild( WEBVR.getMessage() );
+
+			}
+
+			//
+
 			var camera, scene, renderer;
 			var video, texture;
 
@@ -50,7 +60,6 @@
 				container.addEventListener( 'click', function () {
 
 					video.play();
-					effect.setFullScreen( true );
 
 				} );
 
@@ -136,6 +145,13 @@
 				effect.scale = 0; // video doesn't need eye separation
 				effect.setSize( window.innerWidth, window.innerHeight );
 
+				if ( WEBVR.isAvailable() === true ) {
+
+					document.body.appendChild( WEBVR.getButton( effect ) );
+
+				}
+
+
 				//
 
 				window.addEventListener( 'resize', onWindowResize, false );