Adsense

2010年10月6日水曜日

[LSL] 位置と回転について ~ 位置を表す二つの方法 ~

何年やってもなかなか理解し難いのがオブジェクトの位置と回転の扱い方という方は多いように思います。
多くの先輩諸氏がブログなどに Secondlife や LSL での「位置」と「回転」に関する情報を残してくれていますが、前提とする知識のレベルが高かったり、専門的であったりして、自分のレベルに合う情報をなかなか見つけることが難しいエリア、話題ですよね。
私もちょっと避けてきたのですが、この数ヶ月やらなきゃいけない課題があり、ようやく、というか、なんとなく、、理解できたような気がしたので、自分の勉強も兼ねてまとめてみようと思います。
今のところ以下の6回にわけて、Secondlife と LSL による位置と回転(向き)の考え方をまとめてみようと思います。最終的な目標は複数プリムからなるオブジェクトにアバタ―が座った時に、そのアバタ―を自分の思い通りにスクリプトで動かすことができるようにしたいと考えています。

1. 位置を表す二つの方法
2. 移動量という考え方
3. 基準はどこにあるの?
4. ルートプリムと子プリムたち
5. アバターにスクリプトはいれられない
6. スクリプト連携による方法

これらの投稿の課題として、なるべく数学的な要素を省き、三角関数や行列計算、虚数などの深い理解を必要としない形でオブジェクトやアバタ―を動かすことができればいいな、その内容を伝えられたらいいな、と思っています。

1. 位置を表す二つの方法
3次元空間における位置と向きの指定が難しいのは、もしかすると最初の出だしに問題がありそうな気がしました。それは空間の概念です。簡単すぎてあまり深く考えていませんでしたが、二つの方法 (グローバルとローカルじゃないですよ) があることをしっかり理解したほうがあとあと楽になりそうです。

私たちが最初に理解するのは XYZ 軸を使った位置の指定方法です。SIMの中で東西南北天地直交した軸に沿っていきたい場所、今いる場所を特定できます。
同じように XYZ 軸を使って東西、南北、天地に関係なく、いま自分が向いている方向で前後左右上下直交する軸に沿っていきたい場所を指定することもできます。それぞれをグローバル座標軸(もしくはリージョン座標軸)、ローカル座標軸を使った位置の指定と呼びます。
このあたりは、この話題にご興味を持たれた方はすでにご存知かと思います。
また、私のブログでもかなり前に触れています。(混乱を避けるために、以下の私のブログは読まなくてもいいです。)

位置と回転を理解したい1
位置と回転を理解したい2
位置と回転を理解したい3

過去に書いたこの上記3つのブログでも意識していなかった空間の概念というが、位置の指定方法における別のやり方です。それがクォータニオンを使った位置の指定です。えっ?クォータニオンって回転じゃないの?と思われるでしょう。私もつい最近までそうでした。(^_^)

クォータニオンが何かを数学的に理解するのは正直時間がかかります。行列計算、三角関数、複素数、虚数、ジンバルロック、、、などなど。でも、数学的な理解が目的ではないので、ここではクォータニオンをある点からある点への「移動量」として理解してみようと思います。ここでは移動量が何か、何で構成されるのかは考えず、とにかく位置 A から位置 B に移動するのにクォータニオンという「移動量」を使えば移動できる、と考えるわけです。また位置 A や位置 B についてもクォータニオンで表現できる、と覚えます。

この移動量による位置指定の概念を理解するのに一番良い、第一歩として「地球」上の位置を考えてみます。

たとえば、東京からニューヨークに移動するとします。よりわかりやすくするために、成田空港から JFK 空港に直行便があって、それらの空港間を移動すると考えます。一番最短な距離で成田から JFK にいくには「大圏航路(たいけんこうろ)」という最短距離を飛ぶのが理想とされています。途中 LAX (ロサンゼルス)やアンカレッジに寄り燃料補給せずに直接行けるなら、この大圏航路を使えばいいのです。とにかく、大圏航路は地球上の2点を結ぶ最短距離で、それは1つしかない、と理解してみます。
googlemap
また成田空港という場所の指定を地球上でやろうとすると、、、日本の住所もありますが、地球規模で考えると緯度と経度を使いますよね。(緯度35.763983, 経度140.384644) JFK 空港も同様に緯度・経度で位置を指し示すことが可能です。(緯度40.6444122, 経度 -73.782745)つまり、、、地球上の「どこ」でも緯度と経度で位置を指定できます。

ちょっと、まって、、、「地表」ならともかく、地球上には「高さ」があるわけだから、富士山の頂上と、道路の上では「位置」は違うじゃん、と思いますよね。でも、その違いは「標高」や「高度」、「海抜」で表現すればいいのです。
よって、地球上では「緯度」「経度」「高さ」の3つの数字があればどんな位置でも特定が可能なのが、なんとなく想像つくと思います。

位置を表す二つの方法の言い換えると、「立方体で考える空間と位置指定」「球体で考える空間と位置指定」と考えることもできます。

次回はとくに球体で考える空間における「移動量」とクォータニオンをインワールドに適用したときの考えについてまとめてみようと思います。