2章 基本概念
著者:梅谷 武
語句:ToposNote, 世界座標系, カーソル座標系, 物体座標系, ジンバルロック, 局所座標系, 多様体, トポスオブジェクト, 図形オブジェクト
ToposNoteの基本概念について述べる。
作成:2009-12-18
更新:2011-03-08
 ToposNoteにおいては、空間内に世界座標系world coodinate systemと呼ばれる右手系の正規直交座標系(O;e1,e2,e3)を定め、それを基準とします。
 世界座標系の各座標軸はX軸(e1)、Y軸(e2)、Z軸(e3)と呼ばれ、X-Y平面が水平面、Z軸が鉛直方向の上方向、Y軸は北方向、X軸は東方向に対応しています。
 地図は世界座標系のX-Y平面にユニバーサル横メルカトル図法universal transverse mercatorにより投影されます。
 ToposNoteを実装するCGプラットフォームには、OpenGLとDirectXの2種類があり、それぞれ次のような座標系で動作しています。
 Luaスクリプト拡張においては、なるべく世界座標系を使ったラッパー関数でプラットフォームに依存しないインターフェースを作るようにしていますが、実際にはプラットフォーム座標系を使うことが必要となる場合があります。
 ToposNoteの画面は空間をカメラで投影したものであり、画面の中心にはつねにカメラの視参照点を原点とするカーソル座標系cursor coordinate system(Oc;e1,e2,e3)が存在します。これは世界座標系を平行移動したもので、物体操作はこのカーソル座標系を基準にして行なわれます。
 カーソル座標系の位置はその原点の位置座標t(Cx Cy Cz)によって示すことができます。カーソル座標系による座標t(x' y' z')と世界座標系による座標t(x y z)との間の座標変換は次のように表すことができます。
(1)
lb144
x
y
z
1
rb144 = lb144
1
0
0
Cx
0
1
0
Cy
0
0
1
Cz
0
0
0
1
rb144 lb144
x'
y'
z'
1
rb144
 ToposNoteの画面に対して、物体が定義されたファイルをドラッグ&ドロップするとき、物体座標系modeling coordinate system をカーソル座標系と一致させ、物体の外接直方体の重心が原点と一致し、原点を中心として一辺が2の立方体にちょうど外接するように拡大縮小・平行移動され、仮想空間内の3Dモデルが生成されます。Luaスクリプトによって直接図形を定義する場合、正規化は行なわれません。
 Luaスクリプトから物体の定義ファイルを読み込む場合、あるいはすでに存在する3Dモデルを操作する場合には、世界座標系を基準とした位置と姿勢を指定することができます。
 物体座標系の位置はその原点の位置座標t(Mx My Mz)により、 姿勢は回転行列A = (aij) ∈ SO(3)により表現することができます。物体座標系による座標t(x'' y'' z'')と世界座標系による座標t(x y z)との間の座標変換は次のように表すことができます。
(2)
lb144
x
y
z
1
rb144 = lb144
a11
a12
a13
Mx
a21
a22
a23
My
a31
a32
a33
Mz
0
0
0
1
rb144 lb144
x''
y''
z''
1
rb144
 物体の姿勢を人間が表現する場合には、四元数よりもオイラー角で表した方がわかりやすいため、回転表現はオイラー角を使うことが多いのですが、この場合、ジンバルロックgimbal lockに注意しなければなりません。
 このジンバルロックを避けるために次の原則を推奨します。
  1. オイラー角で姿勢を与えるときには、なるべく特異点から離れた表現を使う。
  2. 軌道計算は四元数によって行い、結果を特異点から遠いオイラー角表現に変換する。
 ジンバルロックを避けるために常に適切な局所座標系local coordinate systemを選ぶというこの原則は、現代数学における多様体manifoldの概念に対応しています。
 ToposNoteにおいてはオイラー角表現の種類としては、KMLやCOLLADA形式と同じ右手系のヨー・ピッチ・ロールを採用し、内部表現には四元数を使っています。内部における四元数とオイラー角の相互変換では上の原則によりジンバルロックを回避しています。
 ToposNoteは空間内にさまざまな種類のデータを貼り付けることができます。データの種類はファイル拡張子によって判別されます。おもなデータ形式は次の4種類です。
3Dモデル X形式(.x), OBJ形式(.obj)
画像 JPEG形式(.jpg), BMP形式(.bmp), PNG形式(.png), GIF形式(.gif)
GPS GPX形式(.gpx)
その他 任意の3文字拡張子
 これらのデータを貼り付けると、プログラム内部ではトポスオブジェクトtopos objectと呼ばれる空間属性をもつ内部オブジェクトが生成されます。
 これらは名前で参照する配列、いわゆる連想配列として扱われます。名前を指定しなくてもオブジェクトを生成することができますが、その場合でも内部で名前が自動生成され、連想配列に登録されています。
 トポスオブジェクトの名前とは英数字から成る256文字以下の文字列であり、重複を許しません。同じ名前でオブジェクトを登録すると古い方のオブジェクトが削除されます。
 すべてのトポスオブジェクトは次の属性を持っています。
  1. 位置座標
  2. 姿勢
  3. 拡大縮小係数
  4. 運動軌跡配列
  5. データファイル名
  6. 関連付けファイル名
  7. 生成日時
 Luaスクリプトにより生成された図形オブジェクトはトポスオブジェクトと似たように振舞いますが、内部ではトポスオブジェクトとは別の独立した仕組みで処理されており、トポスオブジェクトとして扱うことはできません。
語  句
世界座標系 world coodinate system
ユニバーサル横メルカトル図法 universal transverse mercator
カーソル座標系 cursor coordinate system
物体座標系 modeling coordinate system
ジンバルロック gimbal lock
局所座標系 local coordinate system
多様体 manifold
トポスオブジェクト topos object
 
Published by SANENSYA Co.,Ltd.