Three.js 学習(3)

by seijitakagi

HTML

<script src="http://pyro.jp/dev/lib/js/RequestAnimationFrame.js"></script>
<script src="http://pyro.jp/dev/lib/js/Three.js"></script>
<script src="http://pyro.jp/dev/lib/js/Detector.js"></script>
<div id="container" ></div>

CSS

#container {
    background: #fff100;
    height: 600px;
    margin:0 auto;
}

JavaScript

if ( ! Detector.webgl ) {
    Detector.addGetWebGLMessage();
}

var container, 
     camera, 
     scene, 
     renderer, 
     mesh, 
     light,
     windowHalfX,
     targetRotation = 2,
     targetRotationOnMouseDown = 0,
     mouseX = 0,
     mouseXOnMouseDown = 0;

init();
animate();

function init() {

    container = document.getElementById( 'container' );
    windowHalfX = container.clientWidth * 0.5;

    camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 10000 );
    camera.position.z = 3000;

    scene = new THREE.Scene();

    light = new THREE.DirectionalLight( 0xffffff );
    light.position.set( 0, 0, 1 ).normalize();
    scene.add( light );

    var loader = new THREE.JSONLoader();
    loader.load( "http://pyro.jp/dev/resources/dragon.js", createScene );

    renderer = new THREE.WebGLRenderer( { antialias: true } );
    renderer.setSize( container.clientWidth, container.clientHeight );

    container.appendChild( renderer.domElement );

    document.addEventListener( 'mousedown', onDocumentMouseDown, false );
    document.addEventListener( 'touchstart', onDocumentTouchStart, false );
    document.addEventListener( 'touchmove', onDocumentTouchMove, false );
}

function createScene( geometry ) {
    var material = new THREE.MeshFaceMaterial();
    mesh = new THREE.Mesh( geometry, material );
    mesh.position.y = -container.clientHeight;
    mesh.scale.x = mesh.scale.y = mesh.scale.z = 4;
    scene.add( mesh );
}

function onDocumentMouseDown( event ) {
    event.preventDefault();
    document.addEventListener( 'mousemove', onDocumentMouseMove, false );
    document.addEventListener( 'mouseup', onDocumentMouseUp, false );
    document.addEventListener( 'mouseout', onDocumentMouseOut, false );
 
    mouseXOnMouseDown = event.clientX - windowHalfX;
    targetRotationOnMouseDown = targetRotation;
}
 
function onDocumentMouseMove( event ) {
    mouseX = event.clientX - windowHalfX;
    targetRotation =...