Threejs - Groups
HTML
<script src="https://rawgit.com/mrdoob/three.js/dev/build/three.js"></script>
<script src="https://rawgit.com/mrdoob/three.js/dev/examples/js/controls/OrbitControls.js"></script>
CSS
/* fix mouse click offset errors when doing drags */
body {
margin: 0;
}
JavaScript
class Main {
constructor(){
this.objects = [];
this.scene = new THREE.Scene();
var width = window.innerWidth;
var height = window.innerHeight * .75;
this.camera = new THREE.PerspectiveCamera(
35, width/height, 0.1, 1000
);
this.renderer = new THREE.WebGLRenderer();
this.renderer.setSize( width, height );
this.renderer.setClearColor( 0xcccccc, 1 );
// controls should set 2nd param or mouse move will be all over the main dom element
// null on 2nd param, threejs will use the parent as the mouse click and prevent default
this.controls = new THREE.OrbitControls(this.camera, this.renderer.domElement);
// will turn off zooming while panning with right mouse click, false by default
this.controls.screenSpacePanning = true;
document.body.appendChild( this.renderer.domElement );
this.scene.add(this.camera);
this.setToFullOrbit(this.controls);
this.camera.position.copy(new THREE.Vector3(10,10,10));
// fix first frame render issue going invisible
this.camera.lookAt(new THREE.Vector3(0,0,0));
var axisHelper = new THREE.AxisHelper();
this.scene.add(axisHelper);
this.group = new THREE.Group();
this.group.applyMatrix(new THREE.Matrix4().makeTranslation(0,2,0));
this.group.position.x += 5;
this.scene.add(this.group);
var grid = new THREE.GridHelper();
this.scene.add(grid);
this.createScene();
this.fps = 5;
this.currentFrame = 0;
this.canAnimate = false;
}
createScene(){
var s1 = Utils.createSphere();
this.group.add(s1);
var s2 = Utils.createSphere();
this.group.add(s2);
s2.position.x += 4;
var s3 = Utils.createSphere();
this.group.add(s3);
s3.position.x += 2;
// rotating the group happens in the render
var btn = document.createElement('button');
btn.innerHTML = 'Play';
btn.addEventListener('click', (e) => {
...