OrbitControls & Resize

buttons

by jmchen

HTML

<div id="info">My Second Three.js
  <br/> turning, buttons, orbitControls, resize
  <br/>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r70/three.min.js"></script>
<script src="https://dl.dropboxusercontent.com/u/3587259/Code/Threejs/OrbitControls.js"></script>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>

CSS

#info {
  position: absolute;
  top: 2%;
  width: 100%;
  padding: 10px;
  text-align: center;
  color: #ffff00
}

body {
  overflow: hidden;
}

JavaScript

var scene, renderer, camera;
var controls;
var group, angle = 0;
var ball;

init();
animate();


function init() {
  scene = new THREE.Scene();
  renderer = new THREE.WebGLRenderer();
  renderer.setSize(window.innerWidth, window.innerHeight);
  renderer.setClearColor(0x888888);
  document.body.appendChild(renderer.domElement);

  camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 1000);
  camera.position.z = 500;
  controls = new THREE.OrbitControls(camera, renderer.domElement);

  var geometry = new THREE.BoxGeometry(100, 20, 20);
  var material = new THREE.MeshBasicMaterial({
    wireframe: true
  });

  var gridXZ = new THREE.GridHelper(100, 10);
  gridXZ.setColors(new THREE.Color(0xff0000), new THREE.Color(0xffffff));
  scene.add(gridXZ);
  window.addEventListener('resize', onWindowResize, false);
	///////////////////////////////////////////////////////////////////////
	var mesh = new THREE.Mesh(geometry, material);
  group = new THREE.Object3D();
  group.add (mesh);
  mesh.position.y = 10;
  scene.add(group);
  group.position.set (20,0,30);
  group.rotation.y = -Math.PI/6;
	
  ball = new THREE.Mesh (new THREE.SphereGeometry (5,12,12), new THREE.MeshBasicMaterial());
  scene.add (ball);
//  var pp = group.localToWorld (new THREE.Vector3(50,0,0));
	console.log (group.matrixWorld);
//	ball.position.copy (pp);
}

// the key is where localToWorld is called:
// inside init() or in animate()
//??? 

function onWindowResize() {
  camera.aspect = window.innerWidth / window.innerHeight;
  camera.updateProjectionMatrix();
  renderer.setSize(window.innerWidth, window.innerHeight);
}

function animate() {
//  group.rotation.y = -Math.PI/6;
  var pp = group.localToWorld (new THREE.Vector3(50,0,0));
//console.log (group.matrixWorld);
	//alert (group.matrixWorld);
  ball.position.copy (pp);
  
  controls.update();
  requestAnimationFrame(animate);
  renderer.render(scene, camera);
}