css3d_panorama_deviceorientation.html 3.8 KB
Newer Older
M
Mr.doob 已提交
1 2 3
<!DOCTYPE html>
<html>
	<head>
W
WestLangley 已提交
4
		<title>three.js css3d - panorama - device orientation</title>
M
Mr.doob 已提交
5 6
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
M
Mr.doob 已提交
7
		<link type="text/css" rel="stylesheet" href="main.css">
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
		<style>

			#overlay {
				position: absolute;
				z-index: 1;
				top: 0;
				left: 0;
				width: 100%;
				height:100%;
				display: flex;
				align-items: center;
				justify-content: center;
				opacity: 1;
				background-color: #000000;
				color: #ffffff;
			}

			#overlay > div {
				text-align: center;
			}

			#overlay > div > button {
				height: 20px;
				background: transparent;
				color: #ffffff;
				outline: 1px solid #ffffff;
				border: 0px;
				cursor: pointer;
			}

			#overlay > div > p {
				color: #777777;
				font-size: 12px;
			}

		</style>
M
Mr.doob 已提交
44 45
	</head>
	<body>
46 47 48 49 50 51
		<div id="overlay">
			<div>
				<button id="startButton">Start Demo</button>
				<p>Using device orientation might require a user interaction.</p>
			</div>
		</div>
M
Mr.doob 已提交
52
		<div id="info"><a href="http://threejs.org" target="_blank" rel="noopener">three.js</a> css3d - panorama - device orientation.<br/>cubemap by <a href="http://www.humus.name/index.php?page=Textures" target="_blank" rel="noopener">Humus</a>.</div>
M
Mr.doob 已提交
53

54
		<script type="module">
55

M
Mr.doob 已提交
56
			import * as THREE from '../build/three.module.js';
57 58 59

			import { DeviceOrientationControls } from './jsm/controls/DeviceOrientationControls.js';
			import { CSS3DRenderer, CSS3DObject } from './jsm/renderers/CSS3DRenderer.js';
M
Mr.doob 已提交
60 61

			var camera, scene, renderer;
62
			var controls;
M
Mr.doob 已提交
63

64 65 66 67 68 69 70
			var startButton = document.getElementById( 'startButton' );
			startButton.addEventListener( 'click', function () {

				init();
				animate();

			}, false );
M
Mr.doob 已提交
71 72 73

			function init() {

74 75 76
				var overlay = document.getElementById( 'overlay' );
				overlay.remove();

M
Mr.doob 已提交
77
				camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 1000 );
M
Mr.doob 已提交
78

79
				controls = new DeviceOrientationControls( camera );
M
Mr.doob 已提交
80

M
Mr.doob 已提交
81
				scene = new THREE.Scene();
M
Mr.doob 已提交
82 83 84 85

				var sides = [
					{
						url: 'textures/cube/Bridge2/posx.jpg',
L
Lewy Blue 已提交
86
						position: [ - 512, 0, 0 ],
M
Mr.doob 已提交
87 88 89 90 91
						rotation: [ 0, Math.PI / 2, 0 ]
					},
					{
						url: 'textures/cube/Bridge2/negx.jpg',
						position: [ 512, 0, 0 ],
L
Lewy Blue 已提交
92
						rotation: [ 0, - Math.PI / 2, 0 ]
M
Mr.doob 已提交
93 94 95
					},
					{
						url: 'textures/cube/Bridge2/posy.jpg',
L
Lewy Blue 已提交
96
						position: [ 0, 512, 0 ],
M
Mr.doob 已提交
97 98 99 100
						rotation: [ Math.PI / 2, 0, Math.PI ]
					},
					{
						url: 'textures/cube/Bridge2/negy.jpg',
L
Lewy Blue 已提交
101
						position: [ 0, - 512, 0 ],
M
Mr.doob 已提交
102 103 104 105
						rotation: [ - Math.PI / 2, 0, Math.PI ]
					},
					{
						url: 'textures/cube/Bridge2/posz.jpg',
L
Lewy Blue 已提交
106
						position: [ 0, 0, 512 ],
M
Mr.doob 已提交
107 108 109 110
						rotation: [ 0, Math.PI, 0 ]
					},
					{
						url: 'textures/cube/Bridge2/negz.jpg',
L
Lewy Blue 已提交
111
						position: [ 0, 0, - 512 ],
M
Mr.doob 已提交
112 113 114 115
						rotation: [ 0, 0, 0 ]
					}
				];

M
Mr.doob 已提交
116
				var cube = new THREE.Object3D();
M
Mr.doob 已提交
117 118 119 120 121 122 123 124 125 126
				scene.add( cube );

				for ( var i = 0; i < sides.length; i ++ ) {

					var side = sides[ i ];

					var element = document.createElement( 'img' );
					element.width = 1026; // 2 pixels extra to close the gap.
					element.src = side.url;

127
					var object = new CSS3DObject( element );
M
Mr.doob 已提交
128 129 130 131 132 133
					object.position.fromArray( side.position );
					object.rotation.fromArray( side.rotation );
					cube.add( object );

				}

134
				renderer = new CSS3DRenderer();
M
Mr.doob 已提交
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
				renderer.setSize( window.innerWidth, window.innerHeight );
				document.body.appendChild( renderer.domElement );

				//

				window.addEventListener( 'resize', onWindowResize, false );

			}

			function onWindowResize() {

				camera.aspect = window.innerWidth / window.innerHeight;
				camera.updateProjectionMatrix();

				renderer.setSize( window.innerWidth, window.innerHeight );

			}

			function animate() {

				requestAnimationFrame( animate );

				controls.update();
				renderer.render( scene, camera );

			}

		</script>
	</body>
</html>