目次
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>
// 以下省略