【JavaScript】Three.js ~ 入門編 ~

Three.jsとは?

 * WebGLを利用して、ブラウザ上で3Dを描画することができる

補足:用語

 * WebGLとは?
  => ウェブブラウザで3Dを表示させるための標準仕様。

注意

 * WebGLを対応したブラウザでないと使えない
 * 以下のサイトで確認した方がいい
http://caniuse.com/#search=webGl


設定

 * 以下の2通り。

  方法1) 公式サイトからダウンロードして、「three.min.js」 をインポートする
  方法2) 「http://threejs.org/build/three.min.js」をインポートする

動画

 * 以下の動画で感じをつかんだ方がいいかも。
http://dotinstall.com/lessons/basic_threejs

サンプル

例1

<!DOCTYPE html>
<html>
  <head>
    <title>For Three.js sample</title>
    <style>
      body { margin: 0; }
      canvas { width: 100%; height: 100% }
    </style>
  </head>
  <body>
    <script src="">http://threejs.org/build/three.min.js">
    <script>
      // [1] Scene
      var scene = new THREE.Scene();
      
      // [2] Mesh(部品)
      
      // [2-1] Mesh - Geometry(形状)
      var geometry = new THREE.CubeGeometry(50, 200, 50);
      
      // [2-2] Mesh - Material(材質:色など)
      var material = new THREE.MeshBasicMaterial({ color: "blue" });
      
      var cube = new THREE.Mesh(geometry, material);
      cube.position.set(0, 0, 0);
      
      scene.add(cube);
      
      // [3] Light
      // 今回省略
      
      // [4] Camera
      var camera = new THREE.PerspectiveCamera(
        75, window.innerWidth/window.innerHeight, 0.1, 1000);
      camera.position.set(200, 100, 500);
      camera.lookAt(cube.position);

      // [5] Renderering
      var renderer = new THREE.WebGLRenderer();
      renderer.setSize(window.innerWidth, window.innerHeight);
      renderer.setClearColor(0xeeeeee, 1);
      document.body.appendChild(renderer.domElement);
      
      renderer.render(scene, camera);
    </script>
  </body>
</html>

例2

* 例1に Light をつけた
<!DOCTYPE html>
<html>
  <head>
    <title>For Three.js sample</title>
    <style>
      body { margin: 0; }
      canvas { width: 100%; height: 100% }
    </style>
  </head>
  <body>
    <script src="">http://threejs.org/build/three.min.js">
    <script>
      // [1] Scene
      var scene = new THREE.Scene();
      
      // [2] Mesh(部品)
      
      // [2-1] Mesh - Geometry(形状)
      var geometry = new THREE.CubeGeometry(50, 50, 50);
      
      // [2-2] Mesh - Material(材質:色など)
      var material = new THREE.MeshLambertMaterial({ color: "red" });
      
      var cube = new THREE.Mesh(geometry, material);
      cube.position.set(0, 0, 0);
      scene.add(cube);
      
      // [3] Light
      var light = new THREE.DirectionalLight(0xffffff, 1);
      light.position.set(0, 100, 30);
      scene.add(light);
      
      var ambient = new THREE.AmbientLight(0x550000);
      scene.add(ambient);

      // [4] Camera
      var camera = new THREE.PerspectiveCamera(
        75, window.innerWidth/window.innerHeight, 0.1, 1000);
      camera.position.set(200, 100, 500);
      camera.lookAt(cube.position);

      // [5] Renderering
      var renderer = new THREE.WebGLRenderer();
      renderer.setSize(window.innerWidth, window.innerHeight);
      renderer.setClearColor(0xeeeeee, 1);
      document.body.appendChild(renderer.domElement);
      
      renderer.render(scene, camera);
    </script>
  </body>
</html>

例3

<html>
  <head>
    <title>Sample</title>
    <style>
      body { margin: 0; }
      canvas { width: 100%; height: 100% }
    </style>
  </head>
  <body>
    <script src="">http://threejs.org/build/three.min.js">
    <script>
      var scene = new THREE.Scene();
      var camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 );

      var renderer = new THREE.WebGLRenderer();
      renderer.setSize( window.innerWidth, window.innerHeight );
      document.body.appendChild( renderer.domElement );

      var geometry = new THREE.BoxGeometry( 1, 1, 1 );
      var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
      var cube = new THREE.Mesh( geometry, material );
      scene.add( cube );

      camera.position.z = 5;

      var render = function () {
        requestAnimationFrame( render );

        cube.rotation.x += 0.1;
        cube.rotation.y += 0.1;

        renderer.render(scene, camera);
      };

      render();
    </script>
  </body>
</html>