| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 | <!DOCTYPE html><html lang="en">	<head>		<title>three.js webgpu - equirectangular</title>		<meta charset="utf-8">		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">		<link type="text/css" rel="stylesheet" href="main.css">	</head>	<body>		<div id="info">			<a href="https://threejs.org" target="_blank" rel="noopener">three.js webgpu</a> - equirectangular panorama demo. photo by <a href="http://www.flickr.com/photos/jonragnarsson/2294472375/" target="_blank" rel="noopener">Jón Ragnarsson</a>.		</div>		<!-- Import maps polyfill -->		<!-- Remove this when import maps will be widely supported -->		<script async src="https://unpkg.com/[email protected]/dist/es-module-shims.js"></script>		<script type="importmap">			{				"imports": {					"three": "../build/three.module.js",					"three/addons/": "./jsm/",					"three/nodes": "./jsm/nodes/Nodes.js"				}			}		</script>		<script type="module">			import * as THREE from 'three';			import { texture, equirectUV } from 'three/nodes';			import WebGPU from 'three/addons/capabilities/WebGPU.js';			import WebGPURenderer from 'three/addons/renderers/webgpu/WebGPURenderer.js';			import { OrbitControls } from 'three/addons/controls/OrbitControls.js';			let camera, scene, renderer;			let controls;			init();			function init() {				if ( WebGPU.isAvailable() === false ) {					document.body.appendChild( WebGPU.getErrorMessage() );					throw new Error( 'No WebGPU support' );				}				const container = document.createElement( 'div' );				document.body.appendChild( container );				camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 0.25, 20 );				camera.position.set( 1, 0, 0 );				const equirectTexture = new THREE.TextureLoader().load( 'textures/2294472375_24a3b8ef46_o.jpg' );				equirectTexture.flipY = false;				scene = new THREE.Scene();				scene.backgroundNode = texture( equirectTexture, equirectUV(), 0 );				renderer = new WebGPURenderer();				renderer.setPixelRatio( window.devicePixelRatio );				renderer.setSize( window.innerWidth, window.innerHeight );				renderer.setAnimationLoop( render );				container.appendChild( renderer.domElement );				controls = new OrbitControls( camera, renderer.domElement );				controls.autoRotate = true;				controls.rotateSpeed = - 0.125; // negative, to track mouse pointer				controls.autoRotateSpeed = 1.0;				window.addEventListener( 'resize', onWindowResize );			}			function onWindowResize() {				camera.aspect = window.innerWidth / window.innerHeight;				camera.updateProjectionMatrix();				renderer.setSize( window.innerWidth, window.innerHeight );			}			function render() {				controls.update();				renderer.render( scene, camera );			}		</script>	</body></html>
 |