
シーンの表示
============

.. contents::
   :local:
   :depth: 1


シーンとシーンビュー
--------------------

Choreonoidでは、３次元コンピュータグラフィックス（3DCG)として表示可能な情報を「シーン(Scene)」と呼んでいます。ロボットや環境のモデル、およびそれらを複数含む仮想世界もシーンとして扱われる情報となっています。

そして、シーンを表示するビューとして「シーンビュー」が用意されており、これを用いることでロボットモデルや環境モデル等の状況を3DCGを通して視覚的に確認することが可能となっています。さらにシーンビューはシーンを編集するためのインタフェースとしても使えるようになっています。

ここではこのシーンビューを用いたシーンの表示に関する基本的な操作方法を説明します。


空のシーンと座標系
------------------

シーンビューはデフォルトでは以下のような表示になっています。

.. figure:: images/SceneView.png

左下に表示されている３つの矢印の組は、現在の視点から見た３次元空間の座標系を表しています。赤、緑、青の３色の矢印がそれぞれX軸、Y軸、Z軸に対応しています（RGB=XYZ）。Choreonoidにおいては、通常Z軸正方向が鉛直上向きであることを想定しており、シーンビューにおいてもそれを前提とした表示・操作体系となっています。これはロボット工学においては比較的一般的な座標系のとり方なのですが、他にY軸正方向を鉛直上向きに対応させる座標系も（特にCG分野においては）一般的となっているので、それとは異なるという点には注意が必要です。

また、格子状のワイヤフレームは Z=0 となる面を表しています。ロボットのモデルを扱う際にはZ=0の床面を想定することが多いため、これに対応する面をデフォルトで表示しています。

以上の表示のON/OFFについては、後述する設定ダイアログで切り替えることが可能です。


対応アイテム
------------

Choreonoidでは、シーンとして扱うことが可能な情報についても、その多くはアイテムとして定義されています。そのようなアイテムとしては以下のようなものがあります。

.. tabularcolumns:: |p{3.0cm}|p{12.0cm}|

.. list-table::
 :widths: 22,78
 :header-rows: 1

 * - アイテム型
   - 概要
 * - ボディアイテム
   - ロボットや環境のモデル（ボディモデル）に対応するアイテム。モデルの形状や姿勢がシーンとして表示される。
 * - ワールドアイテム
   - 複数のボディモデルをひとつの仮想世界としてまとめるアイテム。モデル間の干渉情報等がシーンとして表示される。
 * - シーンアイテム
   - シーンとして表示する目的に特化したアイテム。3DCGデータの単なる閲覧や、シーンの見た目を整えるといった目的で使用する。
 * - ポイントセットアイテム
   - 点群（ポイントクラウド）データを格納・表示するためのアイテム。

これらの他にも、プラグインによって追加されるアイテムの中に、シーンとして表示可能なアイテムが含まれる場合があります。


対応アイテムの表示
------------------

シーン表示対応アイテムについては、基本的にはアイテムツリービュー上でチェックを入れることにより、シーンビュー上に表示されるようになります。

例えば前節 :doc:`item` で紹介した "SR1Walk" プロジェクトでは、アイテムツリービューは以下のような状態になっていました。

.. figure:: images/ItemTreeView.png

ここで BodyItem型である "SR1" にチェックが入っているので、このロボットのモデルがシーンビュー上に表示されています。

.. image:: images/SR1Walk_scene.png

しかしこのチェックを外すとロボットの表示も消えることになります。また、このプロジェクトでは他に"Floor"もBodyItem型となっていて、このチェックを入れると床のモデルが表示されます。

.. _basics_sceneview_scenebar:

シーンバー
----------

シーンビューの操作を補助するツールバーとして、以下に示す「シーンバー」が用意されています。

.. figure:: images/SceneBar.png

このバーに装備されている機能は左から以下のようになっています。

* 編集モードの切り替え
* 視点操作モードの切り替え
* 描画用カメラ選択
* 視点回復
* 干渉線の表示
* ワイヤフレーム表示
* 設定ダイアログ
		      
これらの機能の使い方について以下で説明します。

.. _sceneview_editmode:

閲覧モードと編集モード
----------------------

シーンビュー全体の操作のモードとして「閲覧（ビュー）モード」と「編集（エディット）モード」があります。

閲覧モードはシーンビューに表示されているモデルやデータの閲覧を行うためのモードで、モデルやデータ自体をシンプルに表示しつつ、操作としては主に視点変更を行うモードとなっています。

編集モードはビューに表示されているモデルやデータの編集を受け付けるモードです。例えばモデルをマウスでドラッグすることで姿勢を変更したりすることができます。

Choreonoid起動直後は閲覧モードになっています。モードの切り替えは以下のいずれかの方法で行います。

* シーンバーの「編集モード切り替えボタン」を押す。これがOFFの時は閲覧モードで、ONにすると編集モードとなる。
* シーンビューにフォーカスがある状態で、ESCキーを押す。（押す度にモードが切り替わります。）
* シーンビュー上でダブルクリックする。（ただし編集モードの時にはダブルクリックが他の操作に割り当てられる場合もあります。）

現在のモードは、シーンバーの「編集モード切り替えボタン」が押し込まれているかどうかで分かります。また、編集モードの時にはモデルに編集用のマーカー等が表示される場合があり、そのような表示があるかどうかで判別することもできます。

具体的な編集操作は対象となるモデルやデータによっても変わってくるので、ここでは詳細を解説しません。（ロボットモデルの操作方法については、 :doc:`../handling-models/index` - :doc:`../handling-models/pose-editing` で解説します。）以下では、主に閲覧モードでの操作方法について解説します。

.. _basics_sceneview_viewpoint:

視点の変更
----------

閲覧モードでは、シーンビュー上でマウスを操作することにより視点の変更を行うことができます。変更する視点要素とマウス操作との対応は以下のようになっています。

* 左ボタンドラッグ: 視点の回転
* 真ん中ボタンドラッグ: 視点の平行移動
* ホイール： 視点のズーム（前後移動）

どの操作についても、操作を行う際にシーンビュー上でマウスカーソルが指している位置によって挙動が変わるようになっており、その位置に着目した視線変更となります。

視点の回転操作においては、ドラッグ開始時にカーソルが指している位置が回転中心となるように回転します。例えばSR1ロボットで、ロボットの右手先部分からドラッグを開始すると右手先を中心として（画面上で手先の位置は変わらないように）視点が変わりますし、左手だと左手中心となりますので、試してみてください。

視点の平行移動においては、ドラッグ開始時に指している位置がその後のドラッグ位置に追従するように平行移動を行います。これは後述のPerspectiveカメラを用いて遠近法で表示している際（デフォルト状態）に効果があります。この場合、近くの物体を指しているときは移動量が少なくなり、遠くの物体を指しているときには移動量が大きくなることになります。

視点のズームについても、近くの物体を指しているときはズーム量（前後移動量）が少なくなり、遠くの物体を指しているときは大きくなります。

なお、マウスカーソルがシーン上で何も無い部分を指している場合は、直前に指していた部分に着目した操作となります。

シーンバーの「視点回復ボタン」を押すと、視点の方向は変えずに、シーン上の全ての物体が見えるように並進位置とズームを調節します。これは視点変更操作を行っている間にどこを見ているか分からなくなった場合に有用です。


視点変更の修飾キー
------------------

視点変更においては、以下の修飾キー操作が可能です。

* Shiftキー + 回転操作： 視点方向を各軸にスナップします。真横や真上といった方向からの画像を得たい場合に使用します。
* Shiftキー + ズーム操作： ズーム量の変化を少なくします。ズーム位置を細かく変更したい場合に使用します。
* Ctrlキー + 並進操作： ズーム操作にします。ズーム位置を連続的に変更したい場合に使用します。

なお、真ん中ボタンが無い環境で真ん中ボタンを使う操作を行うために、スペースキーを真ん中ボタンの代わりに使えるようになっています。ただし、スペースキーの入力を受け付けるためには、シーンビューにキーボードフォーカスが入っている必要がありますので、ご注意ください。


一人称型視点変更モード
----------------------

上記の視点変更操作は、マウスが指している物体を中心に回転する等、シーンビュー上の物体を中心とした操作となっていました。これに対して、視点を中心とした操作体系も用意されており、これを「一人称型視点変更モード」と呼んでいます。このモードに切り替えるには、以下のいずれかの操作を行います。

* シーンバーの「視点操作モード切り替えボタン」をONにする
* シーンビューにフォーカスがある状態で、キーボードの"1"キーを押す（デフォルトのモードに戻すには"3"キーを押す）

このモードでは、視点の回転、並進の操作が以下のように変わります。

* 回転：マウスカーソルの位置によらず、常に視点を中心とした回転となる
* 並進：マウスをドラッグした方向に移動する

このような「一人称型視点変更モード」は、例えば建物の中に入り込んで内部を探索するように閲覧するといった状況で有用です。

.. _basics_sceneview_change_camera:

描画用カメラの変更
------------------

シーンビューにおけるシーン画像の描画は、仮想的なカメラを用いて行われます。このカメラを切り替えることにより、デフォルトとは異なる遠近感や視点での画像を得ることができます。

カメラの切り替えはシーンバーの「描画用カメラ選択コンボ」で行うことができます。このコンボボックスをクリックすると、利用可能なカメラの一覧が表示されますので、そこで選択を行なってください。

デフォルトでは"Perspective（透視投影）"というカメラが選択されています。このカメラでは遠近感のついた画像を得ることができます。

一方で、"Orthographic（正射影）"を選択すると、遠近感を排除した正射影の画像を得ることができます。これは形状や寸法を正確にを把握したい場合などに使用すると便利です。

なお、PerspectiveカメラとOrthographicカメラではズーム操作の内容が多少異なるので注意が必要です。Perspectiveカメラにおいてはカメラの位置を前後に移動させる操作となりますが、Orthographicカメラにおいては位置はそのままで視野を拡大・縮小させる操作となります。Orthographicカメラの場合、カメラの前後位置によっては見たい物体を全て表示できない場合があります。そのようなときには、一旦Perspectiveカメラに切り替えてズーム操作で前後位置を変更（後方に移動）してから、再度Perspectiveカメラに切り替えるようにしてください。

デフォルトで用意されているのは上記の２つのカメラですが、さらにシーンが追加のカメラを含んでいる場合は、それも選べるようになります。例えば、カメラが搭載されているロボットのモデルをシーンに追加すると、そのカメラを選択できるようになります。これによってロボット搭載カメラの視点での画像を得ることができますし、ロボットが動けばそれに伴ってシーンビュー上の画像も変化することになります。ただしこの場合視点はロボットの位置で決まるので、シーンビュー上の通常のマウス操作による視点変更はできません。


.. _basics_sceneview_wireframe:

ワイヤフレーム表示
------------------

シーンバーの「ワイヤフレーム表示ボタン」をONにすると、シーンがワイヤフレームで描画されるようになります。これはモデルのポリゴン構成を見たい場合や、物体の重なり具体を見たい場合などに便利です。シーンの描画方法を変更する要素は他にもいくつかあり、以下で説明する設定ダイアログで設定することが可能です。

.. _basics_sceneview_config_dialog:

設定ダイアログ
--------------

シーンビューの描画方法や挙動については他にも設定可能な項目があり、 :ref:`basics_sceneview_scenebar` の「設定ダイアログ表示ボタン」を押すと表示されるダイアログで細かく設定することが可能です。このダイアログからアクセス可能な主な設定項目の概要を以下に示します。

.. tabularcolumns:: |p{4.0cm}|p{11.0cm}|

.. list-table::
 :widths: 35,65
 :header-rows: 1

 * - 項目
   - 内容
 * - 視野角
   - Perspectiveカメラの視野角を設定します。値が大きいほど広角になります。
 * - クリッピング深度
   - 視点から見た前後の描画範囲を設定します。描画に問題がなければ特に指定する必要はありません。
 * - 照明
   - 照明によるシェーディングのON/OFFを切り替えます。
 * - スムーズシェーディング 
   - スムーズシェーディングをONにします。OFFにするとフラットシェーディングになります。
 * - ヘッドライト
   - 常に視点位置から照射されるライトをONにします。
 * - ワールドライト
   - シーン上に固定されたライト（通常上方から照射される）のON/OFFを切り替えます。
 * - 追加のライト
   - シーン上に読みこまれたモデルがライトを有する場合、そのON/OFFを切り替えます。
 * - 背景色
   - シーン上で何も物体が無い領域の色を設定します。
 * - 床グリッド線の表示
   - 床グリッド線の表示切り替えと、グリッドの大きさ、色等を設定します。
 * - テクスチャ
   - テクスチャ表示のON/OFFを切り替えます。
 * - デフォルト色
   - 色の指定がない物体を描画する際の色を設定します。
 * - デフォルトの線幅
   - 線描画におけるデフォルトの線幅を設定します。
 * - デフォルトの点サイズ
   - 点描画におけるデフォルトの点サイズを設定します。
 * - 法線の表示
   - ポリゴンの各点の法線を表示します。法線の長さも設定できます。
 * - 座標軸
   - シーンビューの左下に表示される座標軸のON/OFFを切り替えます。
 * - フレームレートの表示
   - ONにすると、シーンビューの左上に描画フレームレートが表示されるようになります。「テスト」ボタンを押すと今のシーンをどれくらいのフレームレートで表示できるかのテストを行います。


他に以下の設定項目もあります。

* ワイヤフレームモードでポイントレンダリングを行う

 シーンバーの「ワイヤフレーム表示」をONにしたときに、ポイントレンダリングを行うようにします。

* 新規ディスプレイリスト生成時に二重にレンダリングを行う

 ビデオドライバのバグを回避するためのオプションです。新たに追加した物体がすぐに表示され無い場合にこのチェックをONにすると、不具合を回避できる場合があります。

* ピッキングにOpenGLピクセルバッファを使う

 デバッグ用のオプションです。

* 対象アイテム選択用の専用のチェックをアイテムツリービューに追加
 
 シーンビューは複数生成して、それぞれのビューに別のオブジェクトを表示することもできます。その場合、このチェックをONにしておくとアイテムツリービューの右側に対象シーンビュー専用のチェックが表示されますので、それでシーンビューへの表示のON/OFFを行なってください。なお、シーンビューが複数ある場合、設定ダイアログの対象ビューはダイアログを表示したときに最後にフォーカスのあたっていたシーンビューとなります。


シーンビューの状態・設定内容の保存
----------------------------------

:ref:`basics_project_save` にて述べたように、ビューの状態や設定はプロジェクト保存時にプロジェクトファイルに保存されます。シーンビューの視点位置や各種設定についても、プロジェクト保存時に同時に保存され、次回読み込みの際に同じ状態に戻るようになっています。
