Three.jsをすこし試してみる

See the Pen KKNaYOMCodePen.light

Three.jsとは

three.jsWebGLのAPIを簡略化するためのラッパです。
three.jsを少し触ってみたので、その備忘録です。

コード解説

コードを見ればすぐわかるとは思いますが、いちおうざっくりと説明しておきます。

Scene

まずシーンを作ります。オブジェクトやライトをこのシーンにaddしていきます。

Camera

カメラを作成します。引数は画角・アスペクト比・nearとfarです。平行投影のOrthographicCamera()もあります。
あとカメラの初期位置と注視点を指定します。
カメラはシーンに追加するのではなくて、描画メソッドに渡します(後述)。

Light

今回はアンビエントと原点に点光源を配置しました。それぞれsceneaddします。

Mesh

次に球体のMeshを作ってsceneaddします。球体を作るSphereGeometry()の他にボックスやトーラス等、基本形状を作るメソッドが用意されているので詳しくはthree.jsのリファレンスを見てください。

あとはマテリアルですが、MeshBasicMaterial()はライトの影響を受けません。MeshLambertMaterial()はライトの影響を受けます。

Renderer

最後にRendererを作ってに追加します。
これで最低限の準備は完了です。

OrbitControls

カメラを操作できるようにorbitControlsを生成します。利用するにはthree.jsとは別にOrbitControls.jsを読み込む必要があります。

enableDamping = trueでカメラ操作に慣性がつくようになりますが、毎フレームupdate()を呼ぶ必要があります(後述)。

描画

renderer.render(scene, camera)でレンダリングします。

requestAnimationFrame()three.jsではなくWebGLのAPIで、フレーム更新時に呼ぶアニメーションメソッドをセットします(1回のセットで1回呼ばれるだけなので、毎回セットする必要があります)。

orbitControls.update()は前述のOrbitControlsの慣性を処理します。

まとめ

以上、簡単にですがthree.jsの基本を試してみました。気軽に3Dプログラミングしてる気分になれて良いですね。

今回は基本形状だけを使いましたが本来はモデルデータを利用すべきでしょう。three.jsでは様々なフォーマットのLoaderが用意されているので、モデルの利用も容易にできます。

あと、物理エンジンも用意されているようなので、これもそのうち試してみたいです。