<!DOCTYPE html> <html lang="en"> <head> <title>three.js webgl - materials - lightmap</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"> <style> body { background:#fff; padding:0; margin:0; overflow:hidden; font-family:georgia; text-align:center; } h1 { } a { color:skyblue } #stats { position: absolute; top:0; left: 0 } #stats #fps { background: transparent !important } #stats #fps #fpsText { color: #abc !important } #stats #fps #fpsGraph { display: none } </style> </head> <body> <script src="../build/three.min.js"></script> <script src="js/controls/OrbitControls.js"></script> <script src="js/Detector.js"></script> <script src="js/libs/stats.min.js"></script> <script type="x-shader/x-vertex" id="vertexShader"> varying vec3 vWorldPosition; void main() { vec4 worldPosition = modelMatrix * vec4( position, 1.0 ); vWorldPosition = worldPosition.xyz; gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); } </script> <script type="x-shader/x-fragment" id="fragmentShader"> uniform vec3 topColor; uniform vec3 bottomColor; uniform float offset; uniform float exponent; varying vec3 vWorldPosition; void main() { float h = normalize( vWorldPosition + offset ).y; gl_FragColor = vec4( mix( bottomColor, topColor, max( pow( max( h, 0.0 ), exponent ), 0.0 ) ), 1.0 ); } </script> <script> var SCREEN_WIDTH = window.innerWidth; var SCREEN_HEIGHT = window.innerHeight; var container,stats; var camera, scene, renderer; var clock = new THREE.Clock(); init(); animate(); function init() { container = document.createElement( 'div' ); document.body.appendChild( container ); // CAMERA camera = new THREE.PerspectiveCamera( 40, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 10000 ); camera.position.x = 700; camera.position.z = -500; camera.position.y = 180; // SCENE scene = new THREE.Scene(); scene.fog = new THREE.Fog( 0xffffff, 1000, 10000 ); // CONTROLS controls = new THREE.OrbitControls( camera ); // LIGHTS var directionalLight = new THREE.DirectionalLight( 0x333333, 2 ); directionalLight.position.set( 100, 100, -100 ); scene.add( directionalLight ); var hemiLight = new THREE.HemisphereLight( 0xaabbff, 0x040404, 1 ); hemiLight.position.y = 500; scene.add( hemiLight ); // SKYDOME var vertexShader = document.getElementById( 'vertexShader' ).textContent; var fragmentShader = document.getElementById( 'fragmentShader' ).textContent; var uniforms = { topColor: { type: "c", value: new THREE.Color( 0x0077ff ) }, bottomColor: { type: "c", value: new THREE.Color( 0xffffff ) }, offset: { type: "f", value: 400 }, exponent: { type: "f", value: 0.6 } } uniforms.topColor.value.copy( hemiLight.color ); scene.fog.color.copy( uniforms.bottomColor.value ); var skyGeo = new THREE.SphereGeometry( 4000, 32, 15 ); var skyMat = new THREE.ShaderMaterial( { uniforms: uniforms, vertexShader: vertexShader, fragmentShader: fragmentShader, side: THREE.BackSide } ); var sky = new THREE.Mesh( skyGeo, skyMat ); scene.add( sky ); // RENDERER renderer = new THREE.WebGLRenderer( { antialias: true } ); renderer.setClearColor( scene.fog.color ); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT ); renderer.domElement.style.position = "relative"; container.appendChild( renderer.domElement ); renderer.gammaInput = true; renderer.gammaOutput = true; // STATS stats = new Stats(); container.appendChild( stats.domElement ); // MODEL var loader = new THREE.JSONLoader(); loader.load( "obj/lightmap/lightmap.js", function ( geometry, materials ) { var mesh = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( materials ) ); mesh.scale.multiplyScalar( 100 ); scene.add( mesh ); } ); // 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 ); renderer.render( scene, camera ); stats.update(); } </script> </body> </html>