映像との相互作用

Last update: <2004/03/13 17:30:57 +0900>

相互作用とは

TVや映画の映像は,人間が何も行動しなくても一方的に(勝手に)映像が表示されます.決められた通りに編集された映像が放映(上映)されるだけで,人間はただの傍観者にすぎません.これは情報の一方通行を意味します.

情報の一方通行ではない例は,今,目の前にあるような計算機のシステム,TVゲームなどでしょうか.マウス操作,キーボード操作あるいはコントローラの操作によって,人間の知的活動を計算機にさせたり,キャラクターを動かしてゲームを楽しむことが可能となります.こうしたシステムでは人間の入力操作が映像に反映され,対話的な環境が生じます.このような情報のやり取りが発生するような対話的な操作を相互作用(interaction)といいます*15

対話的な(インタラクティブな)映像とそうでない映像の決定的な違いは,作り置きできるかどうか,ということです.映画やTV放送はあらかじめ映像を作っておけるわけですから,映像生成には時間をかけることが可能です.しかし,インタラクティブ映像は人間の入力に対して即座に反応した映像を生成する必要があります.このことは第1回で少し触れましたが,インタラクティブ映像ではリアルタイム性重視の映像生成が不可欠であり,この映像生成ツールとしてはOpenGLが極めて有用です.

さて,これまで演習で作成してきた映像は,人間の入力を受け付けない単なるムービー*16でした.今回はインタラクティブな映像について考えてみます.


代表的な入力装置


インタラクティブな映像を生成する際の入力装置として,ここでは世間一般的に用いられているものと,VRで良く使われている代表的なものを列挙します. さて,演習ではマウスとキーボードによって物体を操作することをやります.物体の位置姿勢をキーボードやマウスで変化させるためには,その物体の位置姿勢をパラメータで指定しなければなりません.次の節ではパラメータによる指定方法について述べます.

位置姿勢の指定方法


3次元空間で物体の位置を特定するためには3つのパラメータ(x,y,z)を使用します.このことは前回の勉強会で既に述べた通りです.位置の指定方法はこの(x,y,z)を使い,平行移動(Trans)を使えば一意に決まります.

さて,問題は姿勢の指定方法です.前回の勉強会ではx軸周りの回転,y軸周りの回転,z軸周りの回転,という形で説明しました.この指定方法はある軸周りだけの回転(例えばx軸周り)なら簡単に表現できますが,回転を組み合わせて逐次変換すると非常にややこしくなります.ここでは回転移動の一つのルールであるオイラー角について説明します.

オイラー角とは,回転軸をかえながら回転を順次組み合わせて任意の姿勢に移動することのできる変換のことです.図のように3つの回転角度を指定することで,あらゆる姿勢を定義することができます.オイラー角は一見複雑そうに見えますが,同次変換行列の逐次変換を用いれば非常に簡単に表わせます.

図:オイラー角

オイラー角変換は具体的には次のようになります.
  1. まずz軸まわりにα回転します.同次変換行列はRot(z,α)です.
  2. つぎに,新しい座標系においてy軸回りにβ回転します.同次変換行列はRot(y,β)です.
  3. 最後に,新しい座標系においてz軸回りにγ回転します.同次変換行列はRot(z,γ)です.
一連の変換を一つにまとめると,このオイラー角変換は,

となります.

オイラー角変換には大きくわけて2種類あります.例えば上記のz-y-z軸まわりの変換がその一つで,2種類の回転軸を組み合わせています. 一方,前述したポヒマスセンサではオイラー角としてz-y-x軸まわりを利用しており,3種類の回転軸を組み合わせています.どの軸を使うかは用途によっていろいろです.
参考まで回転軸が異なることによって,3つのオイラー角の呼び名も違ってきます. z-y-z軸系での呼び名は,ヘディング(heading),ピッチ(pitch),バンク(bank)が用いられています.z-y-x軸系での呼び名は,アジマス(azimuth),エレベーション(elevation),ロール(roll)が使われる場合もありますし,ヨー(yaw),ピッチ,ロールが使われる場合もあります.

オイラー角を利用する場合は,その回転軸と順序に注意して同次変換行列に導入してください.


視点と物体の配置関係

物体の配置と視点の配置とは切っても切れない関係にあります.視点を物体の左に移動することとは,物体を視点の右に移動することと結果として等しいからです. このことより,視点移動と物体移動の関係について少し詳しく考えてみます.

まず座標系を3つ考えてみて下さい.視点座標系Eとワールド座標系Wそしてモデル座標系Mです.視点座標系は視点の位置と姿勢を表します.またモデル座標系は物体の位置姿勢を表現します.

下の図のような状況を考えてみて下さい.

この図では,視点座標系がワールド座標系からz軸正方向に100,モデル座標系がワールド座標系からz軸負方向に200離れて位置しています.

ワールド座標系から視点座標系に座標変換すると,以下の式のようになります.
(式1)

同様にワールド座標系からモデル座標系に変換すると,次のようになります.
(式2)

実際に表示される見え方は,視点からモデルまで300離れた状態になります.これを式で考えてみましょう.(式1)を変形すると,
(式3)

となります.行列を右辺から左辺に移項する場合,逆行列になります.(式3)を(式2)に代入すると,
(式4)

さて,この平行移動に関する逆行列は,
(式5)

となりますので,(式4)より
(式6)

と変形できます.視点からモデルまでz軸負方向に300だけへ平行移動している変換となり,最初の見解と一致します.

ここで重要なのは,ワールド座標系から視点座標系への座標変換は,逆行列で効いてくるということです.冒頭でも述べたように,視点を物体の左に移動することと,物体を視点の右に移動することとは結果として等しい,というのはこれを意味しています.

これは平行移動だけでなく回転移動を含んだ複雑な変換にも適用可能です. 少し複雑な例を考えてみましょう.

この例では視点がワールド座標系からz軸正方向に100平行移動して,x軸周りに-α度回転します.ワールド座標系から視点座標系への変換を式で表すと,
(式7)

ワールド座標系からモデル座標系への変換を式で表すと,
(式8)

さて,視点からモデルまでの座標変換を考えてみます.(式7)を変形すると,
(式9)

となります.逆行列を左からかける順番に注意して下さい.
(式9)を(式8)に代入すると,
(式10)

のようになります.その結果,視点からワールド座標系への変換はx軸周りに+α度回転し,z軸正方向に100平行移動して,さらにz軸正方向に200平行移動したものになっています.
くりかえしますが,ワールド座標系から視点座標系への座標変換は,逆行列で効いてきます.逆行列ですから,平行移動や回転の符号が逆転するのは当然ですが,行列をかける順番まで逆転することに注意して下さい.視点の移動を自由に制御できるようになれば,座標変換マスターといえるでしょう.*17


演習問題


自習問題

  1. ティーポットを軌跡上で動かすというプログラムが演習問題にありました.(ensyu4-3.c)
    このプログラムではティーポットが軌跡上を移動していましたが,こんどは軌跡に沿って視点を動かしてみてください.つまり,格子模様の立方体内で自分が移動するシーンを作成して下さい.この時,座標変換はどうなるでしょうか.

  2. ここで勉強したOpenGLの関数は,
    です.赤本やGLUTのマニュアルを利用して,復習しておきましょう.

戻る