webxr_vr_panorama.html 3.3 KB
Newer Older
R
rNix 已提交
1 2 3
<!DOCTYPE html>
<html lang="en">
	<head>
4
		<title>three.js webxr - panorama</title>
R
rNix 已提交
5
		<meta charset="utf-8">
M
Mr.doob 已提交
6
		<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
M
Mr.doob 已提交
7
		<link type="text/css" rel="stylesheet" href="main.css">
M
Mugen87 已提交
8 9
		<!-- WebXR Device API (For Chrome M76+), expires 12/04/2019 -->
		<meta http-equiv="origin-trial" content="Aq9LklhCLNUveuCr7QTpGpqwCPG817cYHdVyQuJPOZYk47iRB390lUKa5edVmgS1pZSl8HPspElEC/91Fz55dwIAAABTeyJvcmlnaW4iOiJodHRwczovL3RocmVlanMub3JnOjQ0MyIsImZlYXR1cmUiOiJXZWJYUkRldmljZU03NiIsImV4cGlyeSI6MTU3NTQxNzU5OX0=">
R
rNix 已提交
10 11
	</head>
	<body>
12
		<script src="js/vr/HelioWebXRPolyfill.js"></script>
R
rNix 已提交
13

M
Mugen87 已提交
14
		<script type="module">
15

M
Mr.doob 已提交
16
			import * as THREE from '../build/three.module.js';
17
			import { VRButton } from './jsm/webxr/VRButton.js';
R
rNix 已提交
18

M
Mugen87 已提交
19 20 21
			var camera;
			var renderer;
			var scene;
M
Mr.doob 已提交
22

M
Mugen87 已提交
23 24
			init();
			animate();
R
rNix 已提交
25

M
Mugen87 已提交
26
			function init() {
R
rNix 已提交
27

M
Mr.doob 已提交
28
				renderer = new THREE.WebGLRenderer();
M
Mugen87 已提交
29 30 31 32
				renderer.setPixelRatio( window.devicePixelRatio );
				renderer.setSize( window.innerWidth, window.innerHeight );
				renderer.vr.enabled = true;
				document.body.appendChild( renderer.domElement );
R
rNix 已提交
33

34
				document.body.appendChild( VRButton.createButton( renderer, { referenceSpaceType: 'local' } ) );
35

M
Mugen87 已提交
36
				//
M
Mr.doob 已提交
37

M
Mr.doob 已提交
38
				scene = new THREE.Scene();
R
rNix 已提交
39

M
Mr.doob 已提交
40
				camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 1, 1000 );
M
Mugen87 已提交
41
				camera.layers.enable( 1 );
R
rNix 已提交
42

M
Mr.doob 已提交
43
				var geometry = new THREE.BoxBufferGeometry( 100, 100, 100 );
M
Mugen87 已提交
44
				geometry.scale( 1, 1, - 1 );
M
Mr.doob 已提交
45

M
Mugen87 已提交
46
				var textures = getTexturesFromAtlasFile( "textures/cube/sun_temple_stripe_stereo.jpg", 12 );
R
rNix 已提交
47

M
Mugen87 已提交
48
				var materials = [];
R
rNix 已提交
49

M
Mugen87 已提交
50
				for ( var i = 0; i < 6; i ++ ) {
R
rNix 已提交
51

M
Mr.doob 已提交
52
					materials.push( new THREE.MeshBasicMaterial( { map: textures[ i ] } ) );
R
rNix 已提交
53

M
Mugen87 已提交
54
				}
R
rNix 已提交
55

M
Mr.doob 已提交
56
				var skyBox = new THREE.Mesh( geometry, materials );
M
Mugen87 已提交
57 58
				skyBox.layers.set( 1 );
				scene.add( skyBox );
R
rNix 已提交
59 60


M
Mugen87 已提交
61
				var materialsR = [];
R
rNix 已提交
62

M
Mugen87 已提交
63
				for ( var i = 6; i < 12; i ++ ) {
R
rNix 已提交
64

M
Mr.doob 已提交
65
					materialsR.push( new THREE.MeshBasicMaterial( { map: textures[ i ] } ) );
R
rNix 已提交
66

M
Mugen87 已提交
67
				}
R
rNix 已提交
68

M
Mr.doob 已提交
69
				var skyBoxR = new THREE.Mesh( geometry, materialsR );
M
Mugen87 已提交
70 71
				skyBoxR.layers.set( 2 );
				scene.add( skyBoxR );
R
rNix 已提交
72

M
Mugen87 已提交
73
				window.addEventListener( 'resize', onWindowResize, false );
R
rNix 已提交
74

M
Mugen87 已提交
75
			}
R
rNix 已提交
76

M
Mugen87 已提交
77
			function getTexturesFromAtlasFile( atlasImgUrl, tilesNum ) {
R
rNix 已提交
78

M
Mugen87 已提交
79
				var textures = [];
R
rNix 已提交
80

M
Mugen87 已提交
81
				for ( var i = 0; i < tilesNum; i ++ ) {
R
rNix 已提交
82

M
Mr.doob 已提交
83
					textures[ i ] = new THREE.Texture();
R
rNix 已提交
84

M
Mugen87 已提交
85
				}
R
rNix 已提交
86

M
Mr.doob 已提交
87
				var loader = new THREE.ImageLoader();
M
Mugen87 已提交
88
				loader.load( atlasImgUrl, function ( imageObj ) {
R
rNix 已提交
89

M
Mugen87 已提交
90 91
					var canvas, context;
					var tileWidth = imageObj.height;
R
rNix 已提交
92

M
Mugen87 已提交
93
					for ( var i = 0; i < textures.length; i ++ ) {
R
rNix 已提交
94

M
Mugen87 已提交
95 96 97 98 99 100 101
						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;
R
rNix 已提交
102

M
Mugen87 已提交
103
					}
R
rNix 已提交
104

M
Mugen87 已提交
105
				} );
R
rNix 已提交
106

M
Mugen87 已提交
107
				return textures;
R
rNix 已提交
108

M
Mugen87 已提交
109
			}
R
rNix 已提交
110

M
Mugen87 已提交
111
			function onWindowResize() {
R
rNix 已提交
112

M
Mugen87 已提交
113 114
				camera.aspect = window.innerWidth / window.innerHeight;
				camera.updateProjectionMatrix();
R
rNix 已提交
115

M
Mugen87 已提交
116
				renderer.setSize( window.innerWidth, window.innerHeight );
R
rNix 已提交
117

M
Mugen87 已提交
118
			}
R
rNix 已提交
119

M
Mugen87 已提交
120
			function animate() {
R
rNix 已提交
121

M
Mugen87 已提交
122
				renderer.setAnimationLoop( render );
M
Mr.doob 已提交
123

M
Mugen87 已提交
124
			}
R
rNix 已提交
125

M
Mugen87 已提交
126
			function render() {
R
rNix 已提交
127

M
Mugen87 已提交
128
				renderer.render( scene, camera );
R
rNix 已提交
129

M
Mugen87 已提交
130
			}
R
rNix 已提交
131 132 133 134

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