Pure THREE.JS template

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r73/three.js"></script>
<script src="https://dl.dropboxusercontent.com/u/3587259/Code/Threejs/OrbitControls.js">
</script>

JavaScript

var scene, renderer, camera, controls;

init();
animate();

var plane, mesh;

function init()
{	

		// https://github.com/mrdoob/three.js/issues/1752#issuecomment-5454286
    THREE.Object3D.prototype.lookAtWorld = function( vector ) {

      this.parent.worldToLocal( vector );
      this.lookAt( vector );

    }
    
    basicScene();

    mesh = new THREE.Mesh( new THREE.BoxGeometry(5, 5, 5 ) );
    mesh.position.set( 10, 1, 8 );
    mesh.material.wireframe = true;
    scene.add( mesh );

    var geo = new THREE.PlaneGeometry( 10, 10 );
    plane = new THREE.Mesh( geo );
    mesh.add( plane );
}

function basicScene() {

    var width = window.innerWidth;
    var height = window.innerHeight;
    
    renderer = new THREE.WebGLRenderer( {antialias:true} );
    renderer.setSize (width, height);
    document.body.appendChild (renderer.domElement);

    scene = new THREE.Scene();

    camera = new THREE.PerspectiveCamera (60, width/height, 0.01, 10000);
    camera.position.y = 16;
    camera.position.z = 40;
    camera.lookAt (new THREE.Vector3(0,0,0));

    controls = new THREE.OrbitControls (camera, renderer.domElement);

    var gridXZ = new THREE.GridHelper(100, 10);
    gridXZ.setColors( new THREE.Color(0xff0000), new THREE.Color(0xffffff) );
    scene.add(gridXZ);  
    
}

function animate()
{
		mesh.rotation.y += 0.01;
    
    // does not work
    //plane.lookAt( camera.getWorldPosition() );

    plane.lookAtWorld( camera.getWorldPosition() );
    // alternative
    //var v = plane.parent.worldToLocal( camera.getWorldPosition() );
    //plane.lookAt( v );

    
    requestAnimationFrame ( animate );  
    renderer.render (scene, camera);
}