Three.js – practice①

目次

three.jsを使う準備

npm install three

シーンの作成(scene)

シーンとは

3Dモデルの配置、カメラと視点、ライトと照明などの設定、表示ができる。

始める前にHTMLの作成

index.htmlでscene, camera, rendererの設定

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>three.js tutorial</title>
  <style>
    body {margin: 0;}
  </style>
</head>
<body>
  <script type="module" >
    import * as THREE from 'https__unpkg.com/three/build/three.module.js';
  </script>
</body>
</html>

index.htmlのscript内に以下を記述

 <script type="module" >
    import * as THREE from 'https://unpkg.com/three/build/three.module.js';
  
    // ここから
    const scene = new THREE.Scene();
    const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1 , 1000);

    const renderer = new THREE.WebGLRenderer();
    renderer.setSize(window.innerWidth, window.innerHeight);
    document.body.appendChild(renderer.domElement);
    // ここまで追記
  </script>

rendere要素を追加

<script type="module" >
    import * as THREE from 'https://unpkg.com/three/build/three.module.js';
  
    
    const scene = new THREE.Scene();
    const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1 , 1000);

    const renderer = new THREE.WebGLRenderer();
    renderer.setSize(window.innerWidth, window.innerHeight);
    document.body.appendChild(renderer.domElement);
    
    // ここから
    const geometry = new THREE.BoxGeometry(1, 1, 1);
    const material = new THREE.MeshBasicMaterial({color: 0x00ff00});
    const cube = new THREE.Mesh(geometry, material);
    scene.add(cube);

    camera.position.z = 5;
    // ここまで追記
  </script>

シーン(scene)のレンダリング

// 以上は省略
    const material = new THREE.MeshBasicMaterial({color: 0x00ff00});
    scene.add(cube);

    camera.position.z = 5;
    
    // ここから
    function animate() {
      requestAnimationFrame(animate);
      renderer.render(scene, camera);
    }
    animate();
    // ここまで追記
  </script>

キューブのアニメーション

// 以上省略
function animate() {
      requestAnimationFrame(animate);
      // ここから
      cube.rotation.x += 0.01;
      cube.rotation.y += 0.01; 
      // ここまで追記
      renderer.render(scene, camera);
    }
    animate();
//以下省略

完成

WebGLとの交互性確認と条件分岐

 <script type="module">
      import * as THREE from "https://unpkg.com/three/build/three.module.js";
      // 以下1行追加
      import WebGL from "three/addons/capabilities/WebGL.js";
      

// 中間省略

// animate関数をif文で囲う
if (WebGL.isWebGLAvailable()) {
        animate();
      } else {
        const warning = WebGL.getWebGLErrorMessage();
        document.getElementById("container").appendChild(warning);
      }
</script>
// 以下省略

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
目次