Three.js sample
by Yoshiharu Kamata
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:#ffff00; width:300px; height:300px;margin:0 auto;"></div>
<a href="javascript:void(0);" id="btn">start</a>
</div>
<canvas id="c1" width="100" height="100" >
</canvas>
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(){
var canvas = document.getElementById('c1');
if ( ! canvas || ! canvas.getContext ) { return false; }
var ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.fillRect(20, 20, 80, 40);
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera( 50, 1, 1, 1000 );
camera.position.z = 300;
plane = new THREE.Mesh( new THREE.PlaneGeometry( 200, 200, 3, 3 ),
new THREE.MeshBasicMaterial(
// { map:THREE.ImageUtils.loadTexture( 'http://pyro.jp/dev/images/pyrojp.png' ),
{ map:THREE.ImageUtils.loadTexture( canvas.toDataURL() ),
overdraw: true } )
);
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 );
}