WebGLを使った3D描画を実装できるライブラリ「Three.js」を使ってみたので、使い方をメモしておきます。
対応ブラウザ
WebGLが対応しているブラウザはこちら。
IEは11から対応していて、スマホは未対応のものが多めです。
Three.jsの構築要素
Three.jsは主に以下の部品で構築していきます。
- シーン:3Dを表示する空間
- カメラ:シーンを表示する視点
- メッシュ:3Dのオブジェクト。ジオメトリーとマテリアルから構成。
- ジオメトリー:メッシュのサイズなど
- マテリアル:メッシュの色やテクスチャー、光沢など
- ライト:シーン内の光源
- レンダラー:画面への描画
準備
公式サイトからthree.jsをダウンロードします。
ダウンロードしたファイルを解凍後、buildフォルダ内にある three.min.jsを使用します。
HTMLファイルを作成し、</body>の直前に以下のように記述します。
<script src="./three.min.js"></script> <script src="./sample.js"></script>
今回はsample.jsにThree.jsを使用するための記述を追加していきます。
コードの記述
シーンとカメラを作成して、画面を表示させます。
sample.jsに以下を記述します。
JavaScript
(function() {
// canvasのサイズを指定
var canvasWidth = 600, canvasHeight = 400;
// シーンの作成
var scene = new THREE.Scene();
// カメラの作成
var camera = new THREE.PerspectiveCamera(75, canvasWidth / canvasHeight, 1, 1000);
// 画面表示の設定
var renderer = new THREE.WebGLRenderer();
renderer.setSize(canvasWidth, canvasHeight);
document.body.appendChild(renderer.domElement);
renderer.render(scene, camera);
})();
| PerspectiveCamera(fov, aspect, near, far); | カメラの設定 fov:視野角 aspect:画面の縦横比(横 / 縦) near:カメラの映す範囲。手前をどこまで表示するか。 far:カメラの映す範囲。奥をどこまで表示するか。 |
|---|---|
| setSize(width, height); | 幅と高さの指定。 |
デモページ1
この時点ではカメラを設置して表示させただけなので、真っ黒な画面が表示されるだけです。
helperの表示
カメラ位置の設定、ガイドの表示、背景色の設定を行います。
JavaScript
(function() {
// canvasのサイズを指定
var canvasWidth = 600, canvasHeight = 400;
// シーンの作成
var scene = new THREE.Scene();
// カメラの作成
var camera = new THREE.PerspectiveCamera(75, canvasWidth / canvasHeight, 1, 1000);
camera.position.set(30, 40, 80);
// ヘルパーの表示
var axis = new THREE.AxisHelper(1000);
axis.position.set(0, 0, 0);
scene.add(axis);
// 画面表示の設定
var renderer = new THREE.WebGLRenderer();
renderer.setSize(canvasWidth, canvasHeight);
renderer.setClearColor(0xeeeeee, 1);
document.body.appendChild(renderer.domElement);
renderer.render(scene, camera);
})();
| position.set(X, Y, Z); | 配置するX軸、Y軸、Z軸の座標を指定。 |
|---|
デモページ2
赤、緑、青のガイドラインが表示されました。
それぞれ赤がX軸、緑がY軸、青がZ軸になります。
物体を表示して動かす
箱と球体を配置して、回転させてみます。
JavaScript
(function() {
// canvasのサイズを指定
var canvasWidth = 600, canvasHeight = 400;
// シーンの作成
var scene = new THREE.Scene();
// 箱の作成
var boxGeometry = new THREE.BoxGeometry(10, 10, 10);
var boxMaterial = new THREE.MeshLambertMaterial({ color: '#E74C3C'});
boxMesh = new THREE.Mesh(boxGeometry, boxMaterial);
boxMesh.position.set(0, 0, 0);
scene.add(boxMesh);
// 球体の作成
var sphereGeometry = new THREE.SphereGeometry(10);
var sphereMaterial = new THREE.MeshLambertMaterial({color: '#3498DB'});
var sphereMesh = new THREE.Mesh(sphereGeometry, sphereMaterial);
sphereMesh.position.set(30, 20, 30);
scene.add(sphereMesh);
// カメラの作成
var camera = new THREE.PerspectiveCamera(75, canvasWidth / canvasHeight, 1, 1000);
camera.position.set(30, 40, 80);
// ライトの作成
var light = new THREE.DirectionalLight(0xffffff);
light.position.set(0, 100, 30);
scene.add(light);
// ヘルパーの表示
var axis = new THREE.AxisHelper(1000);
axis.position.set(0, 0, 0);
scene.add(axis);
// 画面表示の設定
var renderer = new THREE.WebGLRenderer();
renderer.setSize(canvasWidth, canvasHeight);
renderer.setClearColor(0xeeeeee, 1);
document.body.appendChild(renderer.domElement);
function render() {
requestAnimationFrame(render);
boxMesh.rotation.x += 0.05;
boxMesh.rotation.y += 0.05;
sphereMesh.rotation.y += 0.01;
sphereMesh.rotation.z += 0.01;
renderer.render(scene, camera);
}
render();
})();
| BoxGeometry(X, Y, Z); | 箱型のジオメトリーの作成。X、Y、Zでそれぞれの方向のサイズを指定。 |
|---|---|
| SphereGeometry(size); | 球体のジオメトリーの作成。sizeで指定した数値が半径。 |
| MeshLambertMaterial({ color: ‘#xxxxxx’}); | 物体のマテリアルの指定。 今回は色の指定ですが、他にもテクスチャーや光沢など色々指定できます。 |
| Mesh(geometry, material); | ジオメトリーとマテリアルからメッシュを作成。 |
| scene.add(mesh); | メッシュをシーンに追加。 |
デモページ3
箱と球体が画面に表示されました。
【参考サイト】
- Three.js入門 (全14回) – プログラミングならドットインストール
- 初心者でも絶対わかる、WebGLプログラミング<three.js最初の一歩> | HTML5Experts.jp
- デザイナー・ノンプログラマにおすすめしたいThree.jsのカンタン3D体験 | 株式会社LIG


コメントが承認されるまで時間がかかります。