4 <title>three.js webgl - geometry hierarchy 2</title>
6 <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
19 <script src="../build/three.js"></script>
20 <script src="js/libs/stats.min.js"></script>
26 var camera, scene, renderer;
30 var mouseX = 0, mouseY = 0;
32 var windowHalfX = window.innerWidth / 2;
33 var windowHalfY = window.innerHeight / 2;
35 document.addEventListener( 'mousemove', onDocumentMouseMove, false );
42 container = document.createElement( 'div' );
43 document.body.appendChild( container );
45 camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 1, 15000 );
46 camera.position.z = 500;
48 scene = new THREE.Scene();
49 scene.background = new THREE.Color( 0xffffff );
51 var geometry = new THREE.BoxGeometry( 100, 100, 100 );
52 var material = new THREE.MeshNormalMaterial();
54 root = new THREE.Mesh( geometry, material );
55 root.position.x = 1000;
58 var amount = 200, object, parent = root;
60 for ( var i = 0; i < amount; i ++ ) {
62 object = new THREE.Mesh( geometry, material );
63 object.position.x = 100;
72 for ( var i = 0; i < amount; i ++ ) {
74 object = new THREE.Mesh( geometry, material );
75 object.position.x = - 100;
84 for ( var i = 0; i < amount; i ++ ) {
86 object = new THREE.Mesh( geometry, material );
87 object.position.y = - 100;
96 for ( var i = 0; i < amount; i ++ ) {
98 object = new THREE.Mesh( geometry, material );
99 object.position.y = 100;
101 parent.add( object );
108 for ( var i = 0; i < amount; i ++ ) {
110 object = new THREE.Mesh( geometry, material );
111 object.position.z = - 100;
113 parent.add( object );
120 for ( var i = 0; i < amount; i ++ ) {
122 object = new THREE.Mesh( geometry, material );
123 object.position.z = 100;
125 parent.add( object );
130 renderer = new THREE.WebGLRenderer();
131 renderer.setPixelRatio( window.devicePixelRatio );
132 renderer.setSize( window.innerWidth, window.innerHeight );
133 container.appendChild( renderer.domElement );
136 container.appendChild( stats.dom );
140 window.addEventListener( 'resize', onWindowResize, false );
144 function onWindowResize() {
146 windowHalfX = window.innerWidth / 2;
147 windowHalfY = window.innerHeight / 2;
149 camera.aspect = window.innerWidth / window.innerHeight;
150 camera.updateProjectionMatrix();
152 renderer.setSize( window.innerWidth, window.innerHeight );
156 function onDocumentMouseMove(event) {
158 mouseX = ( event.clientX - windowHalfX ) * 10;
159 mouseY = ( event.clientY - windowHalfY ) * 10;
167 requestAnimationFrame( animate );
176 var time = Date.now() * 0.001;
178 var rx = Math.sin( time * 0.7 ) * 0.2;
179 var ry = Math.sin( time * 0.3 ) * 0.1;
180 var rz = Math.sin( time * 0.2 ) * 0.1;
182 camera.position.x += ( mouseX - camera.position.x ) * .05;
183 camera.position.y += ( - mouseY - camera.position.y ) * .05;
185 camera.lookAt( scene.position );
187 root.traverse( function ( object ) {
189 object.rotation.x = rx;
190 object.rotation.y = ry;
191 object.rotation.z = rz;
195 renderer.render( scene, camera );