Angular service that implements THREE.js - see http://threejs.org/
Require the 'threejs' module in your app and inject the 'THREEService' into a directive.
Example:
// add the 'threejs' module to your app
myapp = angular.module('myapp', ['threejs']);
// inject THREEService into your directive
(function() {
'use strict';
angular
.module('myapp')
.directive('myScene', myScene);
function myScene($rootScope, THREEService) {
return {
restrict: 'EA',
link: function(scope, element, attrs) {
THREEService.load().then(function(THREE) {
var container, viewsize, camera, scene;
var geometry, material, torus;
var renderer = THREEService.getRenderer();
var animation;
scope.init = function() {
container = element[0];
viewsize = container.clientWidth;
renderer.setSize( viewsize, viewsize );
container.appendChild( renderer.domElement );
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera( 50, 1, 150, 650 );
camera.position.z = 500;
scene.add(camera);
geometry = new THREE.TorusKnotGeometry( 100, 30, 100, 16 );
material = new THREE.MeshDepthMaterial({
color: 0x666666,
wireframe: true,
wireframeLinewidth: 1
});
torus = new THREE.Mesh( geometry, material );
torus.name = "Torus";
scene.add(torus);
};
// -----------------------------------
// Event listeners
// -----------------------------------
// Cancel animation when view route or state changes
// eg. watch for state change when using ui-router:
$rootScope.$on('$stateChangeStart', function() {
cancelAnimationFrame( animation );
});
// -----------------------------------
// Draw and Animate
// -----------------------------------
scope.animate = function() {
animation = requestAnimationFrame( scope.animate );
scope.render();
};
scope.render = function() {
torus.rotation.x += 0.006;
torus.rotation.y += 0.006;
renderer.render( scene, camera, null, true ); // forceClear == true
};
scope.init();
scope.animate();
});
}
};
}
})();