PTAMの改良 - 3 ユーザー間での座標系の共有

|
前回の改良によって、PTAMのCG座標系の中心点をユーザーが決められるようになるので、
この座標系を離れた複数のユーザーで共有することも可能になります。

ARToolKitでもこれは可能でしたが、PTAMの場合はマップを広げることができるので、マーカーが映るのは最初の1回だけでOKになります。
部屋中にマーカーを張ることなく、いろんな方向を見てもトラッキングが失敗しないようにすることが可能です。


この座標系をユーザー間で共有するには、最低限、座標系を表す変換行列(カメラ座標系とワールド座標系の)が必要になります。


----- < 座標系データの送受信 > -----

通信には、とりあえずWinSockを使用することにしました。
ここで送信されるデータは、まだ変換行列程度ですが、速度を重視してUDPを使用します。

Geekなぺーじ:winsockプログラミング


変換行列はmpTracker->GetCurrentPose()で取得できるので、
これをそのまま送ってやることになります。



----- < CGの描画 > -----

受信側でデータを受け取ったら、そのデータを使用してCGを描画します。
この時、この変換行列が”ワールド座標系からカメラ座標系”の変換を表していることに注意してください。

例えば、マップの描画時に新しいカメラを追加する場合はMapViewer::DrawMap()内に処理を追加します。
関数内のDrawCamera(se3CamFromWorld);をもう一つ追加して、その引数に受信した変換行列を設定してやれば終了です。

3Dモデル(4つの目)の描画は、ARDriver::Render()関数内の、mGame.DrawStuff()で行われています。
ただ、この関数をそのまま使うと、引数に指定したベクトル方向に視線を合わせるようになるので、
そこの処理をコメントアウトし、相手のカメラの座標系に合わせる様にします。


この時描画されるCGでは、相手のカメラの位置と方向のみを表すことができます。
なので、PTAMのサンプルに入っている目のCGのような、単純なモデルが適していると思われます。



このブログ記事について

このページは、PipeRが2009年4月 1日 20:33に書いたブログ記事です。

ひとつ前のブログ記事は「PTAMの改良 - 2 マーカーの認識」です。

次のブログ記事は「PTAMの改良 - 4 PTAM+ARToolKit+通信の動画」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.01a