companynameJ

3D画像モデルの回転表示とは?

マウス操作で回転表示するOrbitControlsを解きほぐす

 
 

はじめに

 
3次元(以下3D)画像ファイルは広く普及してきています。3D画像ファイルの画像とは?で、3D画像ファイルについての記事を書いておりますが、3D画像ファイルの画像は、TVモニターなどの2次元画像表示媒体を通して観察されるのが一般的です。
 
そういう2次元画像表示媒体に表示される3D画像は、当然ながら視点から見える画像は2次元であるので、視点を移動させないと横や後ろの画像を観察することができません。
 
その視点移動(以下視点制御と呼ぶ)を、マウスやタッチ操作によって3D画像に触れることで操作できれば便利です。
本ブログ記事の写真を3次元立体の立方体に貼り付けるツールや、写真を3次元立体の球体に貼り付けるツールでもそのような視点制御技術を用いています。
 
3D図面を設計するためのプロ用CADシステムではそういう視点制御は標準的に用いられています。
 
前回の3D画像ファイルのアニメーションとは?で用いたJavaScriptライブラリであるthree.jsでは、OrbitControlsという仕組みがあります。
 
OrbitControlsは、

・「Three.jsにはカメラの動きを自動的に制御する OrbitControls クラスが存在します。」
・「マウス操作で次のようにカメラを制御できます。
・オービット(周回軌道): 左ボタンでドラッグ
・ズーム: マウスホイール
・パン: 右ボタンでドラッグ」
 引用:Three.jsにはカメラの動きを自動的に制御する OrbitControls

と説明されています。
 
今回は、3D画像の視点制御で回転表示を行うOrbitControls(軌道制御)を解きほぐすことによって3D画像の表示技術を学ぶことにします。
 

OrbitControlsの仕組み

 
Three.jsのOrbitControlsは、OrbitControls.jsというJavaScriptファイルで制御されていています。
 
OrbitControls.jsの解読はしておりませんが、上記本ブログ記事のツールでは、

・3D物体を囲む仮想球体を設定する。
・マウスかタッチ操作で仮想球体をあたかも地球儀を擦って回転させるように、開始点と終了点を定める。
・それら開始点と終了点から、回転軸と回転量を演算して求め、仮想球体をその軸周りに回転させる。

という方法で回転制御をしています。
 
下記で触れるOrbitControls.jsのソースの一部にPolarAngleなどの記述があるのでOrbitControls.jsも似た手法であろうと思われます。
 

OrbitControlsの制限問題

 
OrbitControls.jsは大変優れたライブラリなのですが、

・「OrbitControls.jsを最初は使った。これでとりあえずドラッグができるようになった。これは大きい。でも、縦の回転がなぜか制限される。縦に360度回転できない。上の頂点か下の頂点に来るとそれ以上回転できない。」
 引用:three.jsを使ってみた

という問題が指摘されています。
 
3D画像ファイルで「決定版」とされているglTFファイル(3D画像ファイルの画像とは?参照)のビューアソフトであるglTF ViewerでもThree.jsとOrbitControls.jsを使っているようなので、その同じ問題が存在しています。
 
また、

・「ARする場合の入り口として「model-viewer」( https://modelviewer.dev/ )を使用します。model-viewerは3DモデルをWebXRとしてブラウザ表示、AR表示を簡単に行うための機能を提供する、オープンソースのプロジェクトです。」
・「WebGLフレームワーク(model-viewerの場合はthree.js)の実装」
 引用:Webからのお手軽ARの手段(model-viewer)、glTF/usdによる表現力の違いについて

と紹介されているmodel-viewerでもその同じ問題が存在しています。
 

具体例1(OrbitControlsの例)

 
three.jsとOrbitControls.jsを利用したJavascriptを用いてシンプルな立方体を作りました。
この実行結果を【図1】に示します。
マウスまたはタッチで回転してみて上記問題を確認してください。
上または下に達したら、それ以上回転せずに面内回転に変わります。


【図1】

 

制限問題の原因:

 
OrbitControls.jsのソースを調べてみると、constructorに、
 this.maxTargetRadius = Infinity;
 this.maxPolarAngle = Math.PI; // radians
の記載がありました。
 
推測になりますが、横方向は最大が無限なのでどこまでも回転でき、縦方向は最大が180゜なので極に当たる上か下まで回転できることを示していると思われます。
 

おわりに

 

・今回はマウス操作で3D物体を回転させて視点制御するOrbitControls(軌道制御)を調べてみました。

 

・こういう視点制御は3D画像の表示で当たり前のように広く使われています。three.jsに接した際にOrbitControls.jsを知ったのですが、上下で回転が止まる現象に違和感を覚えました。その後多くの3D画像サンプルで同様の動作になることがあると気付いたので調べることにしたのでした。

 

・上下で回転が止まる現象は、回転に制限がなされていたせいでした。その制限の解除はプログラム修正で容易にできると思われるので、今後のバージョン更新などで制限なしのモードが実装されるだろうと考えています。

 

・OrbitControls.jsではありませんが、著名なAutoCADの解説書に、
「[拘束オービット]では、誤ってモデルが完全に裏返しにならないように回転角を制限します。水平方向の回転は自由にできますが、上下に回転した場合、真上または真下(北極または南極)に到達すると回転を停止します。拘束なしでビューを回転する場合は、[自由オービット]モードを使用します。」
 引用:AutoCAD 2007 概説書
という記載があり、その回転制限の意図は「誤ってモデルが完全に裏返しにならないように」という考えなのだと理解しました。

 

・3D画像の課題について今後も調査を続けていきます。

 
 

sub1title

closeicon

サンシャインブルー工房創設者、管理人の 青木ガンバロ と申します。
団塊世代の一技術者としてかつては開発業務に没頭しておりました。今はたそがれ期に入り、世間では簡単なことであっても、自分にとっては知らない、経験していないことが山ほどあると気付かされます。
限りある時間に、少しでもそういう未経験のテーマに挑戦してみようと思い、本工房を立ち上げることにしました。
 
いろいろな分野の学習を続けていると、何度も躓いてしまいます。素朴な疑問が湧いてくるのですが、その解答を得るのに手こずります。
膨大な情報の中から欲しい情報を探るのが難しくなっていると感じます。
 
技術を中心としたさまざまな課題を解きほぐし、より本質的な内容を明らかにすることによって、同じように学ぼうとする方々が、素早く答にたどり着けるような情報を発信していければと考えております。
 
このホームページもその挑戦の一つとして独学で制作してきました。
Web技術の多岐にわたる学習が必要であったり、関連する規格やツールなどの仕組みも進化して更新されていくので、最善解に近づくのは容易ではありません。
当初から躓きの連続でありましたが、多くの親切な方々の的確な記事にも助けられて進めてきました。
まだ多くの疑問点が残っております。逐次改善していくつもりです。
 
これまで多くの友人、先輩方の支えがあったお陰で何とか過ごしてくることができました。
人びとの繋がりの大切さを痛感しております。
どこまで頑張れるか分かりませんが、残る力を絞って進んでまいります。
これからも、皆さまのご援助、ご協力をよろしくお願い申し上げます。

sub2title

closeicon

2019-  4-16

・サンシャインブルー工房の個人事業開業

2022-12-22

・ホームページを公開

・ブログ「立方体に写真を貼り付けるツールを作りました」を公開

・ブログ「球体に写真を貼り付けるツールを作りました」を公開

2023-  2-  3

・ブログ「3DにおけるJPEGとは?」を公開

2023-  3-  1

・ブログ「3D画像ファイルの画像とは?」を公開

2023-  4-16

・ブログ「3D画像ファイルのカメラデータとは?」を公開

2023-  5-22

・ブログ「3D画像ファイルの点群とは?」を公開

2023-  6-28

・ブログ「3D画像ファイルのGeoTIFFとは?」を公開

2023-  7-28

・「役立つーる」ページを新設し、最初のオンラインツールGeoTIFFリーダーを公開

・ブログ「GeoTIFFリーダーを作りました」を公開

2023-  8-16

・ブログ「点群におけるLASとは?」を公開

2023-  9- 1

・ブログ「Googleアースに使われるKMLとは?」を公開

2024-  1-16

・ブログ「3D画像ファイルのアニメーションとは?」を公開

2024-  2- 8

・ブログ「ボーンアニメーションのオフセット行列とは?」を公開

2024-  7- 13

・ブログ「3D画像モデルの回転表示とは?」を公開

sub3title

closeicon






    皆さまからの、ご要望、ご依頼、ご質問、ご意見、ご提案などをお待ちしております。
    当方の事情や、お問い合わせの内容によりましては、返信を差し上げることができない場合もあります。あらかじめご了承ください。

    姓 例)日本

    名 例)太郎

    せい 例)にほん

    めい 例)たろう

    例)xxx@abcde.co,jp

    例)いろはに会社


     

    お問い合わせをいただき、ありがとうございます。

    messageOKこのお問い合わせの送信が完了しました。

    お問い合わせがエラーになりました。再度お試しください。

    messageNGこのお問い合わせの送信が失敗しました。

    sub4title

    closeicon
    1.著作権について
    当サイトは、お客さまご自身の画像が貼り付けられてダウンロードされた画像の情報を除き、当サイトに掲載されている、文章・画像・動画等の著作物の情報を無断転載することを禁止致します。
    当サイトは、ブラウザがFirefoxである場合に動画ファイルの生成のためにLPGLv3ライセンスのFFmpegライブラリを使用しています。
    2.リンクについて
    以下の場合を除き、当サイトを他のWebサイトに自由にリンクすることができます。
    (リンクをお断りするWebサイト)
    違法または反社会的な情報を提供するWebサイト
    当サイトの関係者や提供する情報に対して誹謗、中傷する内容を有するWebサイト
    当サイトであることが不明確であるWebサイト
    sub5title

    closeicon
    1.個人情報保護方針
    当サイトは、お客様からお預かりする個人情報の重要性個人情報の重要性を認識し、個人情報の保護に関する法律、その他の関係法令を遵守し、個人情報を安全かつ適切に取り扱います。
    2.個人情報の取得と利用目的
    個人情報を取得させていただくにあたっては、取得情報と利用目的を以下に定め、必要な個人情報のみを、適法かつ公正な手段により取得させていただきます。
     2.1.お問い合わせやご注文時の情報
    (取得情報)
    お客様ご自身によるお問い合わせやご依頼のための入力情報
    (利用目的)
    お客様へのご依頼に対応するため。
     2.2.ご利用履歴情報
    (取得情報)
    アクセス解析ツールGoogle Analyticsを用いた個人を特定しないトラフィックデータ
    (利用目的)
    ご利用状況の分析により当サイトの一層の改善や拡充を図るため
    このGoogle Analyticsの規約に関する詳細は、ここをクリックしてください。
     2.3.広告管理情報
    (取得情報)
    広告表示ツールGoogle AdSenseを用いた個人を特定しない広告管理データ
    (利用目的)
    お客様の興味に応じた商品やサービスの広告配信のため
    このGoogle AdSenseの規約に関する詳細は、ここをクリックしてください。
    3.個人情報の第三者への開示
    当サイトは、お客様からお預かりした個人情報を、個人情報保護法その他の法令に基づき開示が認められる場合、または、お客様からの同意を得た場合を除き、第三者に提供することはありません。
    4.クッキー(Cookie)について
    クッキー(Cookie)とは、当サイトにアクセスした際にお客様のブラウザに送信され、お客様のコンピューターに保存される情報のことです。
    当サイトでは、利用履歴の収集および広告の管理のためにそのクッキーを使用しています。
    当サイトが使用するクッキーのデータは、個人情報を含むものではありませんが、お客様がブラウザを操作することにより、クッキーの使用を制限(オプトアウト)することや、保存されたクッキーの情報を削除することも可能です。ただし、そのブラウザの設定によっては、当サイト一部の機能が使用できなくなる恐れがありますのでご注意ください。
    5.個人情報保護方針の変更
    当サイトは、法令の制定、改正等により、本個人情報保護方針を適宜見直し、予告なく変更する場合があります。本個人情報保護方針の変更は、変更後の内容が閲覧可能となった時点で有効になります。
    6.免責事項
    当サイトは、正確な情報を掲載するよう努めておりますが、誤情報の混入、情報の陳腐化が起こることがあります。当サイトに掲載された内容や、他のサイトに移動された場合の移動先サイトで提供される情報によって生じた損害等の一切の責任を負いかねますのでご了承ください。