Three.jsのオブジェクト移動をTransformControlsで実装【マウス・タッチ両方対応】

Three.jsでのオブジェクト = メッシュの移動

これには便利なクラスが用意されてました

その名もTransformControlsというもの

使ってみたら本当に便利だったので、
このTransformControlsの使い方を紹介します。

1.Three.js本体とTransformControls.jsを読み込み

まずはここからスタート。

必要なライブラリを読み込みします。

▼ ヘッダーなどでjsを読み込みしておく

それぞれ次の役割があります。

  • three.min.js
    どんなバージョンでもいいけどThree.js本体を読み込み。ここではバージョンr128を使用。もちろんCDN経由ではなくてローカルから直接読み込みしてもOK
  • OrbitControls.js
    マウス・タッチ操作などでSceneをグリグリと回転させたりズームイン・ズームアウトができるThree.js用のライブラリ。
  • TransformControls.js
    今回の主役。特定のメッシュ(Object3D)に対してマウス・タッチでの移動用UIを表示させることができるライブラリ。見た目などは後述

こういう感じです。

2.全体(Scene/Renderer)などの初期化

次に以下に対しての初期化を行います。

  • Scene / WebGLRenderer
  • Camera / Light
  • Mesh(ここではBoxGeometry)
  • その他OrbitControlsの初期化など

※ ただしTransformControlsの処理は後述

以下のようなコードで初期化してみました。

▼ Scene / Rendererの初期化コード例

黒背景に1つのボックスが表示されたはず

ここまでで下準備ができました。

3.TransformControlsに移動メッシュを結びつけ

ここからが肝心のメッシュ移動の実装です。

先ほどのコードに以下を追加します。

▼ TransformControlsの初期化

何をしてるかはコメントを参照

初めに new THREE.TransformControls(camera, renderer.domElement)  のようにカメラ・レンダラーのDOMを渡してTransformControlsをインスタンス化

そして transformControls.attach( cube )  のように移動対象のメッシュ(Mesh / Object3D)を渡すことで、そのオブジェクトを移動できるようになります。

あとOrbitControlsとの併用も行えるように改造

TransformControlsでは移動が開始すると mouseDown  、移動終了すると mouseUp  が発火するので、それぞれでOrbitControlsを無効化/有効化してます。

4.実際のTransformControlsの見た目・動作

こんな感じになりました。

▼ TransformControlsの見た目

three.js - TransformControlsの見た目 - このように移動用UIがメッシュ中心に表示される

▼ 実際にメッシュを動かしている様子

three.js - TransformControlsの動作例 - 移動用UIの矢印を動かすことでメッシュを好きな方向に移動できる

移動用UIの表示もとても分かりやすいです。

XYZ軸方向に動かせることが一目で理解できるので

あと次のCodePenでも動作の確認は可能です。

See the Pen
Three.js - Move mesh by TransformControls
by ぴー助 (@pisuke-code)
on CodePen.

以上、three.js+TransformControlsでした。ではまた

Shareこの記事をシェアしよう!

Commentsこの記事についたコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください