Files
three.js/examples/webgl_materials_cubemap_balls_reflection.html
T
Mr.doob 76e7ea3461 Added namespace to all the objects that missed it (geometries, uniforms, etc)
WebGLRenderer antialias is off by default (considering Firefox doesn't support it...)
Formatting clean up here and there
2011-04-09 12:38:39 +01:00

162 lines
3.9 KiB
HTML

<!DOCTYPE HTML>
<html lang="en">
<head>
<title>three.js webgl - materials - cube reflection [balls]</title>
<meta charset="utf-8">
<style type="text/css">
body {
background:#777;
padding:0;
margin:0;
font-weight: bold;
overflow:hidden;
}
#info {
position: absolute;
top: 0px; width: 100%;
color: #ffffff;
padding: 5px;
font-family:Monospace;
font-size:13px;
text-align:center;
z-index:1000;
}
a {
color: #ffffff;
}
#oldie a { color:#da0 }
</style>
</head>
<body>
<div id="info"><a href="http://github.com/mrdoob/three.js" target="_blank">three.js</a> - webgl cube reflection demo. skybox by <a href="http://ict.debevec.org/~debevec/" target="_blank">Paul Debevec</a></div>
<script type="text/javascript" src="../build/Three.js"></script>
<script type="text/javascript" src="js/Detector.js"></script>
<script type="text/javascript" src="js/RequestAnimationFrame.js"></script>
<script type="text/javascript">
if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
var container, timer;
var camera, scene, webglRenderer;
var cameraCube, sceneCube;
var mesh, zmesh, lightMesh, geometry;
var spheres = [];
var directionalLight, pointLight;
var mouseX = 0;
var mouseY = 0;
var windowHalfX = window.innerWidth / 2;
var windowHalfY = window.innerHeight / 2;
document.addEventListener( 'mousemove', onDocumentMouseMove, false );
init();
animate();
function init() {
container = document.createElement( 'div' );
document.body.appendChild( container );
camera = new THREE.Camera( 60, window.innerWidth / window.innerHeight, 1, 100000 );
camera.position.z = 3200;
cameraCube = new THREE.Camera( 60, window.innerWidth / window.innerHeight, 1, 100000 );
scene = new THREE.Scene();
sceneCube = new THREE.Scene();
var geometry = new THREE.Sphere( 100, 32, 16 );
var path = "textures/cube/pisa/";
var format = '.png';
var urls = [
path + 'px' + format, path + 'nx' + format,
path + 'py' + format, path + 'ny' + format,
path + 'pz' + format, path + 'nz' + format
];
var textureCube = THREE.ImageUtils.loadTextureCube( urls );
var material = new THREE.MeshBasicMaterial( { color: 0xffffff, envMap: textureCube } );
for ( var i = 0; i < 500; i ++ ) {
var mesh = new THREE.Mesh( geometry, material );
mesh.position.x = Math.random() * 10000 - 5000;
mesh.position.y = Math.random() * 10000 - 5000;
mesh.position.z = Math.random() * 10000 - 5000;
mesh.scale.x = mesh.scale.y = mesh.scale.z = Math.random() * 3 + 1;
scene.addObject( mesh );
spheres.push( mesh );
}
THREE.SceneUtils.addPanoramaCubeWebGL( sceneCube, 100000, textureCube );
webglRenderer = new THREE.WebGLRenderer();
webglRenderer.setSize( window.innerWidth, window.innerHeight );
webglRenderer.autoClear = false;
container.appendChild( webglRenderer.domElement );
}
function onDocumentMouseMove(event) {
mouseX = ( event.clientX - windowHalfX ) * 10;
mouseY = ( event.clientY - windowHalfY ) * 10;
}
//
function animate() {
requestAnimationFrame( animate );
render();
}
function render() {
timer = new Date().getTime() * 0.0001;
camera.position.x += ( mouseX - camera.position.x ) * .05;
camera.position.y += ( - mouseY - camera.position.y ) * .05;
cameraCube.target.position.x = - camera.position.x;
cameraCube.target.position.y = - camera.position.y;
cameraCube.target.position.z = - camera.position.z;
for ( var i = 0, il = spheres.length; i < il; i ++ ) {
var sphere = spheres[ i ];
sphere.position.x = 5000 * Math.cos( timer + i );
sphere.position.y = 5000 * Math.sin( timer + i * 1.1 );
}
webglRenderer.clear();
webglRenderer.render( sceneCube, cameraCube );
webglRenderer.render( scene, camera );
}
</script>
</body>
</html>