three.js/docs 日本語訳

英語力のない僕のための日本語版のthree.js/docsサイト (respect three.js/docs) 本家サイトhttp://threejs.org/docs/#Manual/Introduction/Creating_a_scene

three.js canvas - particles - random

f:id:renyamagami:20160311182135p:plain

 

http://threejs.org/examples/#canvas_particles_random

 

日本語訳

<!DOCTYPE html>
<html lang="en">
<head>
<title>three.js canvas - particles - random</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<style>
body {
background-color: #000000;
margin: 0px;
overflow: hidden;
<!-- 入りきらない部分は、隠す方向性で -->
}

a {
color:#0078ff;
}
</style>
</head>
<body>

<script src="../build/three.min.js"></script>

<script src="js/renderers/Projector.js"></script>
<script src="js/renderers/CanvasRenderer.js"></script>

<script src="js/libs/stats.min.js"></script>

<script>

<!-- 定義づけ -->
var container, stats;
var camera, scene, renderer, group, particle;
var mouseX = 0, mouseY = 0;

var windowHalfX = window.innerWidth / 2;
var windowHalfY = window.innerHeight / 2;

init();
animate();

function init() {

container = document.createElement( 'div' );
<!-- containerに、div要素をくっつける。 -->
document.body.appendChild( container );
<!-- body要素に、containerの子要素を入れ込む -->

camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 3000 );
<!-- cameraの設定を行う。 大きさ、高さについての設定 -->
camera.position.z = 1000;
<!-- cameraの位置の設定を行う。z軸方向に、1000上げていく -->

scene = new THREE.Scene();
<!-- シーンの追加 -->

var PI2 = Math.PI * 2;
<!-- PI2の定義を行う -->
var program = function ( context ) {
<!-- proguram関数の設定 contxetが実行されると、施工 -->
context.beginPath();
<!-- 現在のパスのリセットを行う -->
context.arc( 0, 0, 0.5, 0, PI2, true );
<!-- context.arcで、円を描く。最後がtrueなので、反時計周り -->
context.fill();
<!-- 現在の塗りつぶしスタイルで、サブパスを塗りつぶす -->

};

group = new THREE.Group();
<!-- groupを追加 -->
scene.add( group );
<!-- sceanにgroupを追加 -->

for ( var i = 0; i < 1000; i++ ) {
<!-- i=0から、iが1000になるまで繰り返すよ。 -->
var material = new THREE.SpriteCanvasMaterial( {
<!-- materialを作成 -->
color: Math.random() * 0x808008 + 0x808080,
<!-- 色はいろんな色を持つ -->
program: program
} );

particle = new THREE.Sprite( material );
<!-- particleの設計を行う -->
particle.position.x = Math.random() * 2000 - 1000;
<!-- 粒子のx座標の設定 -->
particle.position.y = Math.random() * 2000 - 1000;
<!-- 粒子のy座標の設定 -->
particle.position.z = Math.random() * 2000 - 1000;
<!-- 粒子のz座標の設定 -->
particle.scale.x = particle.scale.y = Math.random() * 20 + 10;
<!-- 粒子の大きさは、一定ん値。 -->
group.add( particle );
<!-- groupにparticleを追加 -->
}

renderer = new THREE.CanvasRenderer();
<!-- rendererを追加 -->
renderer.setPixelRatio( window.devicePixelRatio );
<!-- pixelの率を設定 -->
renderer.setSize( window.innerWidth, window.innerHeight );
<!-- rendererのサイズの設定 -->
container.appendChild( renderer.domElement );
<!-- containerに、rendererの子要素の追加を行う。 -->

stats = new Stats();
<!-- stats関数の設定 -->
stats.domElement.style.position = 'absolute';
<!-- statsの位置付けを絶対値で表す -->
stats.domElement.style.top = '0px';
container.appendChild( stats.domElement );
<!-- containerに、stats.domElement要素の追加 -->

document.addEventListener( 'mousemove', onDocumentMouseMove, false );
<!-- mousemoceが行われた時、onDocumentMouseMoveは行われない -->
document.addEventListener( 'touchstart', onDocumentTouchStart, false );
<!-- touchstartが行われた時、onDocumentTouchStart, falseは実行されない。 -->
document.addEventListener( 'touchmove', onDocumentTouchMove, false );
<!-- touchmoveが、実行された時、 onDocumentTouchMove, falseは実行されない -->
//

window.addEventListener( 'resize', onWindowResize, false );
<!-- resizeされた時、windowのresizeは、行われない、 -->

}

function onWindowResize() {
windowresize関数の設定。
windowHalfX = window.innerWidth / 2;

windowHalfY = window.innerHeight / 2;

camera.aspect = window.innerWidth / window.innerHeight;
<!-- cameraのアス比 -->
camera.updateProjectionMatrix();
<!-- カメラの行列をアップデートする。 -->
renderer.setSize( window.innerWidth, window.innerHeight );
<!-- rendererのサイズの設定 -->
}

//

function onDocumentMouseMove( event ) {
<!-- onDocumentMouseMove関数の設定 イベントを実行すると、実際に起動される。 -->
mouseX = event.clientX - windowHalfX;
mouseY = event.clientY - windowHalfY;
<!-- マウスの位置操作が行われる。 -->
}

function onDocumentTouchStart( event ) {
<!--onDocumentTouchStart関数の設定 eventの設定 -->
if ( event.touches.length === 1 ) {
<!-- もしイベントのタッチの長さが、1ならば。 -->
event.preventDefault();
<!-- イベントを、実行する前にキャンセル可能 -->
mouseX = event.touches[ 0 ].pageX - windowHalfX;
<!-- 最初にタッチした情報のxからwindwHalfXを引いた値が、mouseXの定義。 -->
mouseY = event.touches[ 0 ].pageY - windowHalfY;
<!-- mouseYも同じく -->
}

}

function onDocumentTouchMove( event ) {
<!-- onDocumentTouchMoveの関数の定義、イベントを実行すると、起動する。 -->
if ( event.touches.length === 1 ) {
<!--もし、イベントのタッチの長さが、1ならば -->
event.preventDefault();
<!-- イベントのキャンセルが可能。 -->
mouseX = event.touches[ 0 ].pageX - windowHalfX;
<!-- mouseXの定義。始めにタッチした箇所からの長さを測る。 -->
mouseY = event.touches[ 0 ].pageY - windowHalfY;
<!-- mouseYの定義 -->
}

}

//

function animate() {
<!-- animationの実行 -->
requestAnimationFrame( animate );
<!-- animationframeの実装 -->
render();
<!-- render()を実行 -->
stats.update();
<!-- updateしていく -->
}

function render() {
<!-- rendererの実行 -->
camera.position.x += ( mouseX - camera.position.x ) * 0.05;
<!-- cameraのpositionをどんどん変更していく。 -->
camera.position.y += ( - mouseY - camera.position.y ) * 0.05;
<!-- cameraのpositionをどんどん変更していく。 -->
camera.lookAt( scene.position );
<!-- cameraの視野の中心座標を変換していく。 -->
group.rotation.x += 0.01;
<!-- groupを回転させる -->
group.rotation.y += 0.02;
<!-- groupを回転させる。 -->
renderer.render( scene, camera );
<!-- sceanと、cameraを連携づける。 -->
}

</script>
</body>
</html>