<!DOCTYPE html> <html lang="en"> <head> <title>three.js webgl - materials - compressed textures</title> <meta charset="utf-8"> <style> body { margin: 0px; background-color: #050505; color: #fff; overflow: hidden; } a { color: #e00 } #info { position: absolute; top: 0px; width: 100%; color: #ffffff; padding: 5px; font-family:Monospace; font-size:13px; text-align:center; z-index:1000; } #stats { position: absolute; top:0; left: 0 } #stats #fps { background: transparent !important } #stats #fps #fpsText { color: #aaa !important } #stats #fps #fpsGraph { display: none } </style> </head> <body> <div id="info"> <a href="http://threejs.org" target="_blank">three.js</a> - webgl - PVR compressed textures </div> <script src="../build/three.min.js"></script> <script src="js/loaders/CompressedTextureLoader.js"></script> <script src="js/loaders/PVRLoader.js"></script> <script src="js/Detector.js"></script> <script src="js/libs/stats.min.js"></script> <script> if ( ! Detector.webgl ) Detector.addGetWebGLMessage(); var camera, scene, renderer; var meshes = []; init(); animate(); function init() { camera = new THREE.PerspectiveCamera( 50, window.innerWidth / window.innerHeight, 1, 2000 ); camera.position.z = 1000; scene = new THREE.Scene(); geometry = new THREE.BoxGeometry( 200, 200, 200 ); /* */ var onCube1Loaded = function(texture){ texture.magFilter = THREE.LinearFilter; texture.minFilter = THREE.LinearFilter; texture.mapping = THREE.CubeReflectionMapping; material6.needsUpdate = true; }; var onCube2Loaded = function(texture){ texture.magFilter = THREE.LinearFilter; // texture.minFilter = THREE.LinearMipMapNearestFilter; texture.minFilter = THREE.LinearFilter; texture.mapping = THREE.CubeReflectionMapping; material8.needsUpdate = true; }; var loader = new THREE.PVRLoader(); var disturb_4bpp_rgb = loader.load( 'textures/compressed/disturb_4bpp_rgb.pvr'); var disturb_4bpp_rgb_v3 = loader.load( 'textures/compressed/disturb_4bpp_rgb_v3.pvr'); var disturb_4bpp_rgb_mips = loader.load( 'textures/compressed/disturb_4bpp_rgb_mips.pvr'); var disturb_2bpp_rgb = loader.load( 'textures/compressed/disturb_2bpp_rgb.pvr'); var flare_4bpp_rgba = loader.load( 'textures/compressed/flare_4bpp_rgba.pvr'); var flare_2bpp_rgba = loader.load( 'textures/compressed/flare_2bpp_rgba.pvr'); var park3_cube_nomip_4bpp_rgb = loader.load( 'textures/compressed/park3_cube_nomip_4bpp_rgb.pvr', onCube1Loaded ); var park3_cube_mip_2bpp_rgb_v3 = loader.load( 'textures/compressed/park3_cube_mip_2bpp_rgb_v3.pvr', onCube2Loaded ); disturb_2bpp_rgb.minFilter = disturb_2bpp_rgb.magFilter = flare_4bpp_rgba.minFilter = flare_4bpp_rgba.magFilter = disturb_4bpp_rgb.minFilter = disturb_4bpp_rgb.magFilter = disturb_4bpp_rgb_v3.minFilter = disturb_4bpp_rgb_v3.magFilter = flare_2bpp_rgba.minFilter = flare_2bpp_rgba.magFilter = THREE.LinearFilter; var material1 = new THREE.MeshBasicMaterial( { map: disturb_4bpp_rgb } ); var material2 = new THREE.MeshBasicMaterial( { map: disturb_4bpp_rgb_mips } ); var material3 = new THREE.MeshBasicMaterial( { map: disturb_2bpp_rgb } ); var material4 = new THREE.MeshBasicMaterial( { map: flare_4bpp_rgba , side: THREE.DoubleSide, depthTest: false, transparent: true } ); var material5 = new THREE.MeshBasicMaterial( { map: flare_2bpp_rgba , side: THREE.DoubleSide, depthTest: false, transparent: true } ); var material6 = new THREE.MeshBasicMaterial( { envMap: park3_cube_nomip_4bpp_rgb } ); var material8 = new THREE.MeshBasicMaterial( { envMap: park3_cube_mip_2bpp_rgb_v3 } ); var material7 = new THREE.MeshBasicMaterial( { map: disturb_4bpp_rgb_v3 } ); var mesh = new THREE.Mesh( geometry, material1 ); mesh.position.x = -500; mesh.position.y = 200; scene.add( mesh ); meshes.push( mesh ); mesh = new THREE.Mesh( geometry, material2 ); mesh.position.x = -166; mesh.position.y = 200; scene.add( mesh ); meshes.push( mesh ); mesh = new THREE.Mesh( geometry, material3 ); mesh.position.x = 166; mesh.position.y = 200; scene.add( mesh ); meshes.push( mesh ); mesh = new THREE.Mesh( geometry, material7 ); mesh.position.x = 500; mesh.position.y = 200; scene.add( mesh ); meshes.push( mesh ); mesh = new THREE.Mesh( geometry, material4 ); mesh.position.x = -500; mesh.position.y = -200; scene.add( mesh ); meshes.push( mesh ); mesh = new THREE.Mesh( geometry, material5 ); mesh.position.x = -166; mesh.position.y = -200; scene.add( mesh ); meshes.push( mesh ); var torus = new THREE.TorusGeometry( 100, 50, 32, 24 ) mesh = new THREE.Mesh( torus, material6 ); mesh.position.x = 166; mesh.position.y = -200; scene.add( mesh ); meshes.push( mesh ); mesh = new THREE.Mesh( torus, material8 ); mesh.position.x = 500; mesh.position.y = -200; scene.add( mesh ); meshes.push( mesh ); renderer = new THREE.WebGLRenderer( { antialias: true } ); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( window.innerWidth, window.innerHeight ); document.body.appendChild( renderer.domElement ); stats = new Stats(); document.body.appendChild( stats.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 ); var time = Date.now() * 0.001; for ( var i = 0; i < meshes.length; i ++ ) { var mesh = meshes[ i ]; mesh.rotation.x = time; mesh.rotation.y = time; } renderer.render( scene, camera ); stats.update(); } </script> </body> </html>