JavaScript
Three.js is an open-source library that allows you to easily render 3D graphics in a browser using JavaScript.
Three.js
Three.jsは、JavaScriptで3Dグラフィックスを表示するためのオープンソースのライブラリです。これにより、WebGLを簡単に扱うことができ、ブラウザ上で3Dモデルやアニメーションをレンダリングすることができます。
基本的な特徴
- シーン(Scene)
- 3Dオブジェクトを配置する空間です。シーンにはカメラやライト、メッシュなどのオブジェクトを追加します。
- カメラ(Camera)
- シーンをどのように見るかを決定します。Three.jsには様々な種類のカメラがありますが、一般的には PerspectiveCamera(透視カメラ)がよく使われます。
- レンダラー(Renderer)
- シーンとカメラを基に3Dグラフィックスを描画します。WebGLRendererが最も一般的です。
- ジオメトリ(Geometry)
- 3Dオブジェクトの形状を定義します。BoxGeometry、SphereGeometryなど、様々なプリミティブ形状があります。
- マテリアル(Material)
- オブジェクトの表面の見た目を定義します。MeshBasicMaterial、MeshStandardMaterialなどがあります。
- メッシュ(Mesh)
- ジオメトリとマテリアルを組み合わせた3Dオブジェクトです。
基本的な使い方
JavaScript
// シーンを作成
const scene = new THREE.Scene();
// カメラを作成
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.z = 5;
// レンダラーを作成
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// ジオメトリとマテリアルを作成
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
// メッシュを作成してシーンに追加
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);
// アニメーションループを作成
function animate() {
requestAnimationFrame(animate);
// メッシュを回転
cube.rotation.x += 0.01;
cube.rotation.y += 0.01;
// シーンとカメラを基に描画
renderer.render(scene, camera);
}
// アニメーションを開始
animate();
利用例
Three.jsは、以下のような用途でよく利用されます。
- インタラクティブな3Dグラフィックス
- ゲーム開発
- データビジュアライゼーション
- バーチャルリアリティ(VR)や拡張現実(AR)のアプリケーション
Three.jsを使うことで、Web開発者は複雑な3Dグラフィックスを簡単に作成し、ブラウザ上で実行することができます。
Sample
HTML
<div>
<canvas id="myCanvas"></canvas>
</div>
CSS
div {
display: flex;
}
div canvas{
margin: 1em auto;
}
JavaScript
window.addEventListener('DOMContentLoaded', init);
function init() {
const width = 230;
const height = 230;
// レンダラーを作成
const renderer = new THREE.WebGLRenderer({
canvas: document.querySelector('#myCanvas')
});
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(width, height);
// シーンを作成
const scene = new THREE.Scene();
// カメラを作成
const camera = new THREE.PerspectiveCamera(45, width / height, 1, 10000);
camera.position.set(0, 0, +1000);
// 箱を作成
const geometry = new THREE.BoxGeometry(200, 200, 200);
const material = new THREE.MeshStandardMaterial({color: 0x0000FF});
const box = new THREE.Mesh(geometry, material);
scene.add(box);
// 平行光源
const light = new THREE.DirectionalLight(0xFFFFFF);
light.intensity = 2; // 光の強さを倍に
light.position.set(1, 1, 1);
// シーンに追加
scene.add(light);
// 初回実行
tick();
function tick() {
requestAnimationFrame(tick);
// 箱を回転させる
box.rotation.x += 0.01;
box.rotation.y += 0.01;
// レンダリング
renderer.render(scene, camera);
}
}