(function(){
var canW = window.innerWidth;
var canH = window.innerHeight;
var scene, camera, renderer, controls, effect, container, mesh;
function init(){
container = document.getElementById('canvas-area');
if(!Detector.webgl)Detector.addGetWebGLMessage({ parent: container});//WebGL環境確認
scene = new THREE.Scene();
scene.matrixAutoUpdate = false;
// カメラ:透視投影
camera = new THREE.PerspectiveCamera( 60, canW / canH, 0.001, 2000);
scene.add(camera);
camera.position.set( 0, 0, 20);
camera.lookAt( new THREE.Vector3() );
//レンズの焦点距離(この値によって視差の大小が決まる?)
camera.focalLength = camera.position.distanceTo( new THREE.Vector3() );
//camera.focalLength = 2;
// ライト:環境光 + ディレクションライト
var ambientLight = new THREE.AmbientLight( 0x888888 );
var directionalLight = new THREE.DirectionalLight( 0xffffff, 0.8 );
directionalLight.position.set( 1, 2, 2 );
// 影の設定
directionalLight.castShadow = true;
directionalLight.shadow.camera.near = -30;
directionalLight.shadow.camera.far = 30;
directionalLight.shadow.camera.left = -20;
directionalLight.shadow.camera.right = 20;
directionalLight.shadow.camera.top = 20;
directionalLight.shadow.camera.bottom = -8;
scene.add(ambientLight,directionalLight);
// レンダラー
renderer = new THREE.WebGLRenderer({antialias: true});
renderer.setSize( canW, canH);
renderer.setPixelRatio( window.devicePixelRatio);
renderer.shadowMap.enabled = true;
container.appendChild( renderer.domElement);
// オブジェクト
var geometry = new THREE.TorusKnotGeometry( 5, 1, 80, 60);
var material = new THREE.MeshLambertMaterial({color: 0xF99845});
mesh = new THREE.Mesh( geometry, material);
mesh.position.set( 0, 0, 0);
mesh.castShadow = true;
scene.add(mesh);
// 地面を配置
var geometry = new THREE.PlaneGeometry( 100, 100);
var material = new THREE.MeshLambertMaterial({color: 0xFFFFFF});
var back = new THREE.Mesh(geometry, material);
back.rotation.set( -Math.PI/2, 0, 0);
back.position.set( 0, -8, 0);
back.receiveShadow = true;
scene.add(back);
// カードボード用エフェクト
effect = new THREE.CardboardEffect( renderer);
effect.setSize( canW, canH);
//コントローラー
controls = new THREE.OrbitControls(camera);
controls.enablePan = false;
controls.enableZoom = false;
controls.maxPolarAngle = Math.PI * 0.48;
function setOrientationControls(e){
if(!e.alpha)return;
controls = new THREE.DeviceOrientationControls(camera, true);
controls.connect();
controls.update();
renderer.domElement.addEventListener('click', fullscreen,false);
window.removeEventListener('deviceorientation', setOrientationControls, true);
}
window.addEventListener('deviceorientation', setOrientationControls, true);
window.addEventListener('resize', resize, false);
setTimeout(resize, 1);
rendering();
}
function rendering(){
mesh.rotation.y += 0.01;
mesh.rotation.x += 0.01;
requestAnimationFrame(rendering);
controls.update();
effect.render( scene, camera);
}
function resize(){
var width = window.innerWidth;
var height = window.innerHeight;
camera.aspect = width / height;
camera.updateProjectionMatrix();
effect.setSize(width, height);
}
function fullscreen(){
if(container.requestFullscreen){
container.requestFullscreen();
}
else if(container.msRequestFullscreen){
container.msRequestFullscreen();
}
else if(container.mozRequestFullScreen){
container.mozRequestFullScreen();
}
else if(container.webkitRequestFullscreen){
container.webkitRequestFullscreen();
}
}
$(function(){
init();
});
}());