| <!DOCTYPE html> | |
| <head> | |
| <!-- <script src="https://cdn.jsdelivr.net/npm/three@v0.108.0"></script> --> | |
| <script src="three.min.js"></script> | |
| <script src="GLTFLoader.js"></script> | |
| <script src="BasisTextureLoader.js"></script> | |
| <script src="https://cdn.jsdelivr.net/npm/three@v0.104.0/examples/js/controls/OrbitControls.js"></script> | |
| <style> | |
| html, body { width:100%; height:100%; margin:0; padding:0; } | |
| canvas { display:block; } | |
| #panel { position: absolute; top: 10px; left: 10px; color: white; background-color:rgba(0.3, 0.3, 0.3, 0.3); padding: 0.5em; max-width: 400px;} | |
| </style> | |
| </head> | |
| <body> | |
| <div id="panel"> | |
| <strong>Basis Texture Transcoder glTF Demo</strong> | |
| <div id="log"></div> | |
| </div> | |
| <script> | |
| const renderer = new THREE.WebGLRenderer( { antialias: true } ); | |
| renderer.setSize( window.innerWidth, window.innerHeight ); | |
| renderer.gammaOutput = true; | |
| renderer.gammaFactor = 2.2; | |
| const scene = new THREE.Scene(); | |
| scene.background = new THREE.Color( 0xf0f0f0 ); | |
| const light = new THREE.AmbientLight(); | |
| scene.add( light ); | |
| const light2 = new THREE.PointLight(); | |
| scene.add( light2 ); | |
| const camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 0.1, 100 ); | |
| camera.position.set( 8, 6, 5 ); | |
| camera.lookAt( new THREE.Vector3( 0, -2, 0 ) ); | |
| const controls = new THREE.OrbitControls( camera, renderer.domElement ); | |
| controls.autoRotate = true; | |
| // Create BasisTextureLoader and detect supported target formats. | |
| const basisLoader = new THREE.BasisTextureLoader(); | |
| basisLoader.setTranscoderPath( '../transcoder/build/' ); | |
| basisLoader.useAlpha = false; | |
| basisLoader.detectSupport( renderer ); | |
| let formatName = 'Unknown format'; | |
| switch(basisLoader.workerConfig.format) | |
| { | |
| case THREE.BasisTextureLoader.BASIS_FORMAT.cTFASTC_4x4: | |
| formatName = 'ASTC'; | |
| break; | |
| case THREE.BasisTextureLoader.BASIS_FORMAT.cTFBC1: | |
| formatName = 'BC1'; | |
| break; | |
| case THREE.BasisTextureLoader.BASIS_FORMAT.cTFBC3: | |
| formatName = 'BC3'; | |
| break; | |
| case THREE.BasisTextureLoader.BASIS_FORMAT.cTFBC7_M6_OPAQUE_ONLY: | |
| formatName = 'BC7'; | |
| break; | |
| case THREE.BasisTextureLoader.BASIS_FORMAT.cTFPVRTC1_4_RGB: | |
| case THREE.BasisTextureLoader.BASIS_FORMAT.cTFPVRTC1_4_RGBA: | |
| formatName = 'PVRTC'; | |
| break; | |
| case THREE.BasisTextureLoader.BASIS_FORMAT.cTFETC1: | |
| formatName = 'ETC1'; | |
| break; | |
| default: | |
| break; | |
| } | |
| log(`Transcode to: <strong>${formatName}</strong>`); | |
| // Register BasisTextureLoader for .basis extension. | |
| let loadingManager = new THREE.LoadingManager(); | |
| loadingManager.addHandler( /\.basis$/, basisLoader ); | |
| // Create GLTFLoader, load model, and render. | |
| const loader = new THREE.GLTFLoader(loadingManager); | |
| loader.load( 'assets/AgiHqSmall.gltf', ( gltf ) => { | |
| const model = gltf.scene; | |
| model.scale.set( 0.01, 0.01, 0.01 ); | |
| scene.add( model ); | |
| document.body.appendChild( renderer.domElement ); | |
| animate(); | |
| }, undefined, ( e ) => console.error( e ) ); | |
| // Main render loop. | |
| function animate() { | |
| requestAnimationFrame( animate ); | |
| controls.update(); | |
| renderer.render( scene, camera ); | |
| } | |
| // Support viewport resizing. | |
| window.addEventListener( 'resize', () => { | |
| camera.aspect = window.innerWidth / window.innerHeight; | |
| camera.updateProjectionMatrix(); | |
| renderer.setSize( window.innerWidth, window.innerHeight ); | |
| }, false ); | |
| function log(s) { | |
| const div = document.createElement('div'); | |
| div.innerHTML = s; | |
| document.getElementById('log').appendChild(div); | |
| } | |
| </script> | |
| </body> | |
| </html> |