STERFIELD

【WebGL】Three.jsを使ったWebGLに再挑戦

【WebGL】Three.jsを使ったWebGLに再挑戦

3年ほど前にWebGLのJSらいぶらりー「Three.js」を使ってみたという記事を書いたのですが、
その頃はWebGLの利用できる環境が限られていたことと(iPhoneでは利用できなかったり、PCでもブラウザの設定が必要な場合などがあった)、
Three.jsを利用するとWebGLが利用しやすくなるとはいえ、3Dをプログラムで扱う難易度の高さに変わりはないということがあり、
一旦リタイアしていました。

しかし2016年の今、WebGLが利用できる環境は一般的となってきていて、
Unityなど、WebGLを出力できる開発環境も増えてきているなどの理由から、
WebGLを利用したサイトが現実味を帯びてきています。

WebGLが持っている可能性はとても大きく、
扱う手段を習得することは、Webデザインの可能性を大きく広げることになります。

そこで、以前リタイアしていたWebGLに、Three.jsを利用して再挑戦していくことにしました。

今回は、軸、立方体、ライトという基本的な図形を表示し、
ドラッグによってカメラの位置を移動するという基本的なものに挑戦してみました。

↓こちらが作ってみたもの
DEMO

See the Pen Three.jsによるWebGLに再挑戦1 by Tomoya Ninomiya (@TomoyaNinomiya) on CodePen.

↓基本的な流れはこちらの本を参考にさせていただいています。
three.jsによるHTML5 3Dグラフィックス〈上〉―ブラウザで実現するOpenGL(WebGL)の世界 2013/09 遠藤 理平著

方法

  1. Three.jsをダウンロードして設置
  2. Canvasを設置するHTMLを準備
  3. Three.jsのコードを記述
    1. Three.jsの初期設定
    2. カメラの設置
    3. オブジェクトの設置
    4. 描画の実行
  4. jQueryを使って、ドラッグの処理とカメラの移動を実装

1. Three.jsをダウンロードして設置

Three.jsを公式サイトからダウンロードして下さい。
左上のdownloadというところからダウンロードできます。

ダウンロードすると、320MBほどのファイルがダウンロードされるのでびっくりしてしまいますが、
実際に使うのはその中のthree.min.jsという500KBほどのファイルだけになります。
buildというフォルダの中に入っています。

2. Canvasを設置するHTMLを準備

Three.jsを使う場合、基本的にCanvas要素は指定した要素の子要素として、
Three.jsを通して設置することになります。

そのため、HTML上では、Canvasを設置する親要素を設置しておけばOKです。

3. Three.jsのコードを記述する

いよいよ、Three.jsを使ってWebGLを操作していきます。

1. Three.jsの初期設定

主要な操作はそれぞれ関数にまとめておくと、後々扱いやすくなります。
ここでの主な操作は、THREE.WebGLRendererの呼び出し、設定と、
THREE.Sceneの呼び出し、設定です。

基本的に、ここで設定した場所へ、カメラを配置したり、オブジェクトを配置したりします。

2. カメラの設置

場所が準備出来たら、カメラを設置します。
今回は通常使うことの多いパース(遠近)のついたカメラを設置しています。

3. オブジェクトの設置

いよいよ映し出すオブジェクトを設置していきます。
基本的な流れとしては、
今回の場合はThree.jsで予め用意してある形状を利用しますので、

  1.  Three.jsの中から必要なオブジェクトを呼び出し
  2. オブジェクトの特性を設定
  3. シーンに追加
  4. 位置を設定

という流れになります。3と4は入れ替わっても問題ありません。

4. 描画の実行

描画はレンダラーのクリアと、レンダリングの2つを行います。
レンダリングのときに、設定したシーンオブジェクトとカメラオブジェクトを指定します。

これで描画は完了です。

4. jQueryを使って、ドラッグの処理とカメラの移動を実装

せっかくなので、今回はドラッグに合わせてカメラが移動する操作を実装してみます

マウスとタッチの振り分けを行い、レスポンシブに配慮します。
pageYでドラッグの縦座標を取得し、その移動量に合わせてカメラを移動します。

 

先は長いですが、なんとか自由に扱えるようになりたいです。

 

Author Profile

著者近影

NINOMIYA

Webデザイナー兼コーダー出身のフロントエンド開発者です。 UXデザインやチーム開発の効率化など、勉強中です。

SHARE

合わせて読みたい