dooropen3

with orbitControls, XZgrid, info

by Alan Lin

HTML

<div id="info">door
    <br/>
    Press "O" to open or Press "C" to close
    <br/>
    <a href="javascript:transform();">open/close</a>

</div>
<script src="http://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="http://jyunming-chen.github.io/tutsplus/js/KeyboardState.js"></script>

CSS

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

JavaScript

var camera, scene, renderer, geometry, material, sun, light, earth, angle = 0, controls ;
var Doorframe, columnGeom ,platformGeom, material, latchfrme, state = false, open = true;
var raycaster;
var mouse = new THREE.Vector2();
var pickables = [];
var keyboard = new KeyboardState();

init();
animate();

function init() {
    scene = new THREE.Scene();
	//設置視角
    camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 1000);
    camera.position.y = 100;
    camera.position.x = 150;
    camera.position.z = 200;
    scene.add(camera);

    columnGeom = new THREE.BoxGeometry(5, 50, 5);
    platformGeom = new THREE.BoxGeometry(35, 5, 5);
    material = new THREE.MeshBasicMaterial({color:0x0000ff});
		//設置門框
    Doorframe = new THREE.Object3D();  
    // an empty "Doorframe" for group the meshes, centered at origin
    scene.add(Doorframe);
    var mesh = new THREE.Mesh(columnGeom, material);
    var mesh2 = mesh.clone();
    mesh.position.set(0, 25, 0);
    mesh2.position.set( 30, 25, 0);
    var mesh1 = new THREE.Mesh(platformGeom, material);
    mesh1.position.set(15, 50, 0);
    Doorframe.add(mesh);
    Doorframe.add(mesh1);
    Doorframe.add(mesh2);
    //設置門閂
    var latch = new THREE.Mesh(new THREE.BoxGeometry( 2, 10, 1),new THREE.MeshBasicMaterial({color:0x00ff00}));
		var latch2 = new THREE.Mesh(new THREE.BoxGeometry( 2, 10, 1),new THREE.MeshBasicMaterial({color:0x00ff00}));
    latch.position.set(2.5, 15, 0);
    latch2.position.set(2.5, 35, 0);
    scene.add(latch);
    scene.add(latch2);
    //設置門
    var door = new THREE.Mesh(new THREE.BoxGeometry(24, 47.4, 2),new THREE.MeshBasicMaterial({color:0xff0000}));
    door.position.set(15, 23.7, 0);
    scene.add(door);
    //設置門閂物件
    var handle =  new THREE.Mesh(new THREE.SphereGeometry( 1, 30, 30), material);
    handle.position.set(25, 25 , 1);
    var handle2 = handle.clone(); 
    handle2.position.set(25, 25 , -1);
    latchfrme = new THREE.Object3D();
   ...