2014年1月25日土曜日

AR羅針盤追加機能制作過程(AR天球儀)6

GPS、加速度計、コンパスを用いて
ARで表示される天球と太陽と月と地球の
位置を現実のものに重ね合わせる

月と地球の
大まかな動きは
地球は365.25日で公転し
地軸は地球の公転面に対し23.43度傾いている
月は27.32日で公転し逆向きに同じ周期で自転する
月の自転軸は地球の公転面に対し1.543度で傾き
月の公転面は地球の公転面に対し5.14度傾いている
月の公転面自体は18.5996年周期で月の公転と逆向きに歳差運動している
以上を考慮する

地軸の傾きは25800年周期で歳差運動しているが
今回は取り入れなかった
回転楕円体であることも考慮せず単に球体で近似した
惑星も取り入れなかった
これらは次回のアップデートでは取り入れるかも

加速度計とコンパスでカメラに映った三次元上オブジェクトを水平に
北を向くようにすることはすでにやっていた
あと必要なのはGPSの経度緯度と時刻
これさえあれば天球を正しい向きに配置できる

まず
太陽をトラッキングオブジェクトの中心におく
太陽を中心とした座標系に現在の日時から計算される
天球と地球と月を配置する
この配置の仕方は以下の3つ
1.天球は日時に無関係で地軸と同じ傾き
2.地球の位置は冬至の2012年12月21日11:11に地軸の傾きが太陽の方向を向くように
地球を配置してから現在時間の差分だけ公転させる
自転は一旦0時にグリニッジが太陽の方向を向くように回転
(このときの回転角度は地軸とグリニッジを含む平面と地軸と太陽を含む平面との角度
を外積を用いて計算(二つの平面の法線の外積のarcsin)する)
させてから
世界標準時分だけ回転させる
3.月は2012年5月20日23:53の日食のときに月と太陽と地球と月の公転面の回転軸が一直線上に並ぶように配置して
現在時間との差分から月の公転角度と月の公転面の回転角度を求めて
公転と自転をさせる
月の公転面の回転方向は月の公転と逆向きなことに注意
また公転面自体を回転させないように注意(これをすると月の公転にプラスされてしまう)
公転面の傾きの軸のみを回転させる
つまり(日食からの現在時/18.5996年)*(-2π)だけ回転させた軸で公転面を回転させてから
(日食からの現在時/27.32日)*2πだけ公転面をrollする
月本体は公転などに関係ない太陽中心の座標系で自転軸を傾けてから自転させる

以上で太陽中心に天球、地球、月の配置はできた
次にエンプティのオブジェクトを二つ用意(以下地球オブジェクトと現在位置オブジェクトと呼ぶ)する
地球オブジェクトを地球の子に
現在位置オブジェクトを地球オブジェクトの子オブジェクトにして地球の半径だけ平行移動してから
地球オブジェクトをGPSで取得した経度と緯度だけrollとyawする
これによって現在位置に現在位置オブジェクトが置かれる

次に太陽、地球、月、天球の位置と向きに太陽、地球、月、天球に対応する3Dのモデルを配置し
現在位置オブジェクトの子にする
そして現在位置オブジェクトに行った変換を逆の順番で行い
現在位置オブジェクトをトラッキングオブジェクトの中心に置き
必要ならいくつかの軸で90度の回転させて
トラッキングオブジェクトの座標軸と一致させる
それをすでに作成済みの水平を保ち北を向くオブジェクトの子にする
これで太陽、地球、月、天球の3Dモデルの大まかな配置は完了

後は地球のテクスチャをグリニッジ子午線や北極の位置に注意して貼り付け
月のテクスチャは地球の方を向く面の向きに注意して貼り付け


実際には回転の方向は試行錯誤
月の公転や公転面の歳差運動のオフセットをパラメータで調整できるように
余分な変数を入れて
ARシナリオを再生する際にアプリ側からluaに渡すようにして
実機で調節できるようにしておく

人気ブログランキングへ
にほんブログ村 デザインブログランキング

0 件のコメント:

コメントを投稿