Three.js 学習(1) アニメーション

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>
<div style="margin:0 auto; text-align:center;">
    <div id="container" style="background:#ccc; width:300px; height:300px;margin:0 auto;"></div>
    <a href="javascript:void(0);" id="btn">start</a>
</div>

CSS

#btn {
    display: block;
    background: #ff0000;
    padding: 15px;
    margin: 10px auto;
    text-align: center;
    width: 8em;
    font-size: 12px;
    font-family: arial;
    color: #fff;
    text-decoration: none;
}

JavaScript

var rendering = false;
var camera, scene, renderer, plane;

window.onload = function(){
    scene = new THREE.Scene();
 
    camera = new THREE.PerspectiveCamera( 50, 1, 1, 1000 );
    camera.position.z = 400;
 
    plane = new THREE.Mesh( new THREE.PlaneGeometry( 200, 200 ),
                                       new THREE.MeshBasicMaterial( { color: 0xFF0000 } ) );
    plane.doubleSided = true;
    scene.add( plane );
 
    renderer = new THREE.CanvasRenderer();
    renderer.setSize( 300, 300 );
 
    var container = document.getElementById("container");
    container.appendChild( renderer.domElement );
 
    renderer.render( scene, camera );
    
    var btn = document.getElementById( "btn" );
    btn.onclick = function(e){
        if( rendering ) {
            rendering = false;
            this.innerText = "start";
        } else {
            rendering = true;
            animate();
            this.innerText = "stop";
        }
    };
}
    
function animate() {
    if( !rendering ) return;
    requestAnimationFrame( animate );
    plane.rotation.y += 0.02;
    if( plane.rotation.y >= 360 ) plane.rotation.y = 0;
    renderer.render( scene, camera );
}