var renderer, scene, camera, cubeCamera;
var shinyCubeMesh, bigCubeGeometry, shinyMaterial;
var smallCubeMesh, smallCubeGeometry, normalMaterial;
renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 1000 );
cubeCamera = new THREE.CubeCamera( 1, 1000, 256 );
shinyMaterial = new THREE.MeshPhongMaterial( {
envMap: cubeCamera.renderTarget.texture,
combine: THREE.AddOperation
cubeGroup = new THREE.Object3D();
normalMaterial = new THREE.MeshNormalMaterial();
smallCubeGeometry = new THREE.CubeGeometry(20,20,20);
smallCubeMesh = new THREE.Mesh(smallCubeGeometry, normalMaterial);
bigCubeGeometry = new THREE.CubeGeometry(200,200,200);
shinyCubeMesh = new THREE.Mesh(bigCubeGeometry, shinyMaterial);
scene.add(shinyCubeMesh);
for (var i = 0; i < 200; i++ ) {
var cube = smallCubeMesh.clone();
cube.position.x = Math.random() * 1000 - 500;
cube.position.y = Math.random() * 1000 - 500;
cube.position.z = Math.random() * 1000 - 500;
renderer.autoClear = true;
cubeCamera.updateCubeMap( renderer, scene );
cubeGroup.rotation.y += 0.004;
cubeGroup.rotation.x += 0.004;
shinyCubeMesh.rotation.y -= 0.004;
shinyCubeMesh.rotation.z -= 0.004;
renderer.autoClear = false;
renderer.render( scene, camera );
requestAnimationFrame( loop );