Skip to content
Snippets Groups Projects
Select Git revision
  • master
1 result

index.html

Blame
  • ThreeModel.js 3.56 KiB
    /**
     * Created by aghassaei on 1/17/15.
     */
    
    
    function ThreeModel(){
    
        var camera = new THREE.PerspectiveCamera(60, window.innerWidth/window.innerHeight, 1, 10000);
        var scene = new THREE.Scene();
        var renderer = new THREE.WebGLRenderer({antialias:true});//antialiasing is not supported in ff and on mac+chrome
    
        //store all meshes to highlight
        var cells = [];
        var inverseCells = [];
        var parts = [];
        var basePlane = [];
    
        initialize();
    
        function initialize(){
    
            camera.position.x = 125;
            camera.position.y = 100;
            camera.position.z = 165;
            camera.up.set(0,0,1);//set z axis as "up"
    
            scene.fog = new THREE.FogExp2(0xcccccc, 0.000);
    
            // lights
            var light = new THREE.DirectionalLight(0xffffff);
            light.position.set(1, 1, 1);
            scene.add(light);
            light = new THREE.DirectionalLight(0x002288);
            light.position.set(-1, -1, -1);
            scene.add(light);
            light = new THREE.AmbientLight(0x222222);
            scene.add(light);
    
            // renderer
            renderer.setClearColor(scene.fog.color, 1);
            renderer.setSize(window.innerWidth, window.innerHeight);
    
            window.addEventListener('resize', onWindowResize, false);
        }
    
        function onWindowResize(){
            camera.aspect = window.innerWidth/window.innerHeight;
            camera.updateProjectionMatrix();
            renderer.setSize(window.innerWidth, window.innerHeight);
            render();
        }
    
        function sceneAdd(object, type){
            scene.add(object);
    
            if (type == "cell"){
                cells.push(object.children[0]);
            } else if (type == "inverseCell"){
                inverseCells.push(object.children[0]);
            } else if (type == "part"){
                parts.push(object);
            } else if (type == "basePlane"){
                basePlane.push(object);
            }
        }
    
        function sceneRemove(object, type){
    
            var objectToRemove = getParentObject(object);
    
            if (type == "cell"){
                cells.splice(cells.indexOf(objectToRemove.children[0]), 1);
            } else if (type == "inverseCell"){
                inverseCells.splice(inverseCells.indexOf(objectToRemove.children[0]), 1);
            } else if (type == "part"){
                parts.splice(parts.indexOf(objectToRemove), 1);
            } else if (type == "basePlane"){
                basePlane.splice(0, basePlane.length);//delete array without removing reference
            }
            scene.remove(objectToRemove);
        }
    
        function removeAllCells(){
            _.each(cells, function(cell){
                var objectToRemove = getParentObject(cell);
                scene.remove(objectToRemove);
            });
            _.each(parts, function(part){
                scene.remove(part);
            });
            _.each(inverseCells, function(cell){
                scene.remove(cell);
            });
            cells.splice(0, cells.length);
            inverseCells.splice(0, inverseCells.length);
            parts.splice(0, parts.length);
        }
    
        function getParentObject(object){
            var objectToRemove = object;
            if (object.parent && object.parent.type != "Scene") {
                objectToRemove = object.parent;
            }
            return objectToRemove;
        }
    
        function render(){
            renderer.render(scene, camera);
        }
    
        return {//return public properties/methods
            render: render,
            sceneRemove: sceneRemove,
            sceneAdd: sceneAdd,
    //        scene: scene,
            domElement: renderer.domElement,
            camera: camera,
            cells: cells,
            inverseCells: inverseCells,
            parts: parts,
            basePlane: basePlane,
            removeAllCells: removeAllCells
        }
    }