忍者ブログ
サブタイトル:「mer2のマイノリティ・レポート(笑)」 --- 最近忍者ブログの仕様が変わったようで、一部の画像が見えなくなってますが、画像のURLコピペで見られます。(どうしよう困ったな) --- ご用件など、ございましたらtwitterまでどうぞ。
[120] [121] [122] [123] [124] [125] [126] [127] [128] [129] [130]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



  色々と期待していたz800SDKのヘッドトラッキングサンプルですが、得られるデータはYaw、Pitch、Rollのみです。どうなってんのよ。話が違うぢゃないの。まあ落ち着いてソースを読みましょう。

  main.cpp内の38行目、GetHeadsetData()でヘッドトラッキングなデータを得ています。ヘッドトラッキングデータはEMADeviceDataという構造体に一気に入っているようです。EMADevice.hを見てみましょう。129行目。

typedef struct _EMADeviceData
{
    float AccX ;
    float AccY ;
    float AccZ ;
    float AngX ;
    float AngY ;
    float AngZ ;
    float North ;
    float Yaw ;
    float Pitch ;
    float Roll ;

#ifdef __cplusplus
public:
    void ToDirectX ( )
    {
        // Convert to DirectX coordinate system
        float placeHolder ;
        placeHolder = AccX ;
        AccX = AccY ;
        AccY = - AccZ ;
        AccZ = - placeHolder ;

        placeHolder = AngX ;
        AngX = AngY ;
        AngY = - AngZ ;
        AngZ = - placeHolder ;

        Yaw = - Yaw ;
        Pitch = - Pitch ;
        Roll = - Roll ;
    }
#endif

} EMADeviceData ;

  有りました。スペックどおりに9軸データが取れそうです。
Yaw、Pitch、Roll - ジャイロ
AccX、AccY、AccZ - 加速度
AngX、AngY、AngZ - 地磁気

ってかんじでしょうか。あれ?1個多いぞ?Northって何よ。

  何はともあれ表示させてみましょう。「Sample_YawPitchRoll」をいじってみました。どうぞ(z800ユーザー限定)。

z800_showall.jpg  こんなんなります。









  各データを表示しただけではさっぱりなので、差分も表示させてみました。それでも分かりづらいですが。グラフィカルに表示すると分かりやすくなりそうですが、私にはそんな事ほえっとできる程のスキルはございません。ご了承下さい。

  分かりづらいなりにも、しばらくいじっていると傾向は掴めます。

・ Yaw、Pitch、Roll
  お馴染みのYaw、Pitch、Rollです。これだけ絶対座標で出力されています。
  Yawだけはプログラム起動時(new EMADevice ( )した時)の正面方向が0になります。Pitch、Rollはプログラム起動時の状態に関わらず水平な位置が0になるようです。

・ AccX、AccY、AccZ
  プログラム起動時の向きに対して、上下(AccX)、左右(AccY)、前後(AccZ)の瞬間的な(多分)加速度を出しています。動きが無い時は0近辺で安定します。
  X,Y,Z軸の絶対座標は取れないみたい。なるほど、3D LauncherにおけるX,Y,Z方向への移動に関する挙動の謎が解せました。

・ AngX、AngY、AngZ
  500を基準にして、Yaw、Pitch、Roll方向の瞬間的な変化量(?)を出しています。動きが無い時は500近辺で安定します。
  AngX - Pitch、AngY - Yawに対応しているのがちょっと謎です。EMADeviceData定義内のToDirectX ( )で謎の変換してるのよね。

・ Northっていうのは方位磁石のようです。0で北、+-3.0で南、-1.5(?)で東、+1.5(?)で西。
  もしかしてYawデータの代わりにNorthデータを使ったほうが正確なYaw方向のヘッドトラッキングデータが取れるんじゃないか?既にやっているなら別だが。

  z800に関する謎のベールが剥がされてかなりすっきりしましたが、またやりたい事が増えちゃいました。ああ困った。

  今回、何度もz800をPCと通信させて気が付いたのですが、z800はゴーグル部分を垂直に立てておくと確実に接続できるみたいです。あっという間に繋がります。ゴーグル部分が水平になってると接続に失敗してしまうみたいです。
PR


  適当な場所に解凍して、Visual C++ 2008 Express Editionの「Visual C++ ディレクトリ」でインクルードファイルとライブラリファイルを設定するだけで使えてしまいます。

  「Source」フォルダ内にはサンプルソースがいっぱいいっぱい入ってます。なんと、LabToolやSetupWizardのソースまで入っています。これはバグは自分で潰せという事なのでしょうか。

  とりあえず、基本的な物が詰っているっぽい「EMADevice」から行ってみましょう。
  EMADevice.slnはVisual Studio 2003仕様なソリューションなので、ダブルクリックすると変換ウィザードが出現します。気にしないで変換させましょう。終了するとソリューションエクスプローラ内に(利用不可)という表示が付いている物が有りますが、名前に「Managed」が付いているプロジェクトはC#なプログラムらしいです。C++で利用不可は当たり前です。これも気にしないで進みましょう。

  このままビルドに突入すると、以下のエラーが出ました。
・ hidsdi.hが無い
  ハードディスク内を検索しても、本当に有りません。FromDDK.zipを使いました。
・ dxerr.libをリンクできない
  DirectX SDKのライブラリパスは
\Program Files\Microsoft DirectX SDK (November 2007)\Lib\x86
に通しましょう。

  これでビルドは通りました。しかし、「Sample_StereoVision」だけはビルドに失敗します。ビルドが通ったものは問題無しに動きました。

 こんなんできます。
・ EMADevice_LIB
・ EMADevice_DLL
  名前のとおり、基本パーツです。

・ Sample_Properties
  LabToolで設定できるような事を表示させつつデモ的に値をいじったりするプログラム。終了させたら、私のz800たんの片目がセピア系に設定されてしまっていました。注意しましょう。

・ Sample_EnumerateDevices
  [Enumerate - 数え挙げる, 列挙する;]という事で、PCに繋がっているz800のプロパティを順番に表示するプログラムみたいです。z800を1台しか持っていない人は意味が無いみたい。

・ Sample_MouseEmulation
  そのまんま、ヘッドトラッキングでマウスカーソルを動かすプログラムです。MouseTracking ()という関数一発でできてしまうのがキモです。

・ Sample_YawPitchRoll
  これもそのまんまで、ヘッドトラッキングに合わせてYaw、Pitch、Rollを表示するプログラムです。
  あれ?Yaw、Pitch、Rollだけ?他のデータは?次の記事に続く。

・ Sample_StereoVision
  何かを期待させてくれるプロジェクト名なのですが、これだけビルドエラーが出てしまいました。
エラーメッセージ:
  COFF への変換中に障害が発生しました
対策:
 
ここの通りでいけました。
  ソリュージョンエクスプローラーから「Sample_StereoVision」を右クリック
  プロパティ→構成プロパティ→マニフェストツール→入力と出力→埋め込みマニフェストを”いいえ”に設定
  再び「Sample_StereoVision」を右クリックして右クリックメニューから「ビルド」

  これでビルドは通ります。だけど実行するとエラーが。
The D3D device has a non-zero reference count,meaning some objects were not released.
追っかけてみると、DXUTCreateDevice()で止まっています。うーん、分かんね。

  Documentationによると、「Sample_StereoVision」はDirectX SDKのサンプル「EnhancedMesh」に手を加えたものだそうです。
EnhancedMesh.jpg< こんなの。







  ソース内のz800に関する追記部分はコメント付きで判りやすくなってます。DirectX SDK (November 2007)の「EnhancedMesh」
(\Microsoft DirectX SDK (November 2007)\Samples\C++\Direct3D\EnhancedMesh)
はそのまんまビルドして動いたので、どうにかすればどうにかなるかもしれません。また今度。

  ちなみにビルドできたDirectX SDK (November 2007)の「EnhancedMesh」はnvidiaステレオドライバー不可でした。これがz800で「StereoVision」できてしまうのでしょうか。ますます期待しちゃうじゃないの。


  前記事ついででYouTubeを眺めてたら、こんなのも有った。この方法(正式名称が有ったと思ったのだが、忘れた。ぐぐるキーワードすらうかばない。)は静止画版は見かけても、動画版というのは見た事が無いのよね。そもそもそんなこと可能なのだろうか。ああ、気になってきた。実験したい。

  さあ、ffmpegの出番ですこれ、やってみたかったのよ。

ffmpeg:
最新のFFMpegを導入しよう
こちらからダウンロード

ImageMagic:
本家
参考:
ImageMagick: Command-line Tools: Convert
ツールのぺえじ - convert コマンド結果一覧

  どちらもコマンドラインなプログラムです。コマンドプロンプトを立ち上げて、実行ファイルの有るフォルダにパスを通しておきましょう。
・ pathの確認
>path

・ 実行ファイルが"D:\ffmpeg"に有るならば、
>path=%path%;D:\ffmpeg
これをffmpegとImageMagicの両方に対して行なう。

・ 確認
>ffmpeg
>convert
でちゃんと反応が有れば準備オーケー。


  手持ちのサイドバイサイドな3D動画を加工する事にします。
・ まず、動画を連続画像に分解します。
>ffmpeg -i  TEST.avi  TEST-%04d.png
うわっ、本当にできた。面白い。

・ 各画像をImageMagickでサイドバイサイドな画像から左右の画像に分離させます。
  もしかしたらもっと要領のいい方法が有るのかもしれないけど、これしか見つかんなかった。ImageMagickできる事多過ぎ。

こんな手順になります。

・ 以下のコマンドで、元画像が4つに分割されます。
>convert -crop 50% ./test.png dest.png
こんなふう。
dest-0.png 左上
dest-1.png 右上
dest-2.png 左下
dest-3.png 右下

・ 左画像は左上と左下
>convert -append dest-0.png dest-2.png dest-L.png
・ 右画像は右上と右下
>convert -append dest-1.png dest-3.png dest-R.png

  これで1フレーム分の左右の画像が取り出せました。さらに、

・ 50%side-by-sideな場合はさらに横に伸ばす。
>convert -resize 200x100% dest-L.png dest-LL.png
>convert -resize 200x100% dest-R.png dest-RR.png

  この作業を全フレーム分行なわなければなりません。forコマンドを使います。
  変換元のファイル名は「TEST-xxxx.png」とします。「tmp-xxxxx.png」に変換します。加工中にファイル名の通し番号が5桁になっている点にご注意下さい。

  こんなんなりました。

>for %I in (TEST-*) do convert -crop 50%  %~nI.png dest-%~nI.png && convert -append dest-%~nI-0.png dest-%~nI-2.png %~nI1.png && convert -append dest-%~nI-1.png dest-%~nI-3.png %~nI2.png && del dest*.png

  うぎゃー。本当は各行を分けたほうが分かりやすいのですが、4分割の時にファイル名のフォーマットが変わってしまうので、ファイル名をforコマンドに確実に渡すにはマルチステートメント(&&)せざるを得ませんでした。これももしかしたらもっと上手い方法が有るかもしれません。

  50%side-by-sideな場合はさらにこうなります。ぎゃー。

>for %I in (TEST-*) do convert -crop 50%  %~nI.png dest-%~nI.png && convert -append dest-%~nI-0.png dest-%~nI-2.png %~nI1.png && convert -resize 200x100% %~nI1.png %~nI0.png && del %~nI1.png && convert -append dest-%~nI-1.png dest-%~nI-3.png %~nI2.png && convert -resize 200x100% %~nI2.png %~nI5.png && del %~nI2.png && del dest*.png

  これで素材ができあがりました。しかしffmpegで連続画像から動画を作るには、ファイル名の通し番号が1から始まる連番じゃないと駄目なんだそうです。間が空いているとエラーになります。確かDOS時代にはリナンバー系のテクニックが有ったと思ったんだけど、駄目だ、忘れた。
  悔しいけどwindows版のリナンバーツールを使う事にしました。このへんから適当にどうぞ。私はこれを使ってみました。うーん、ちょっといまいち。だけどちゃんとリナンバーはできました。

  それでもまだ問題が。どうもpngだと動画作成の時にエラーが出てしまいます。jpgならいけるので、jpgに変換します。
>for %I in (tmp-*) do convert  -quality 100 %~nI.png %~nI.jpg

これでやっと通りました。
>ffmpeg -r 29.97 -i tmp-%05d.jpg test.avi

完成です!!

  さあ、どんなでしょうか。


駄目だこりゃ。どっと疲れが。

  毎秒30フレームは速すぎるので10fpsでいってみましょう。
>ffmpeg -r 10 -i tmp-%05d.jpg test.avi


  何か基本的な認識を誤っていたような気がします。これは失敗ですね。お粗末様でした。


  STEREOeYeさんとこのステレオ写真掲示板からまたもや転載。

Re-Qさん製作のカーチェイスシーンのラッシュ映像 。もちろんステレオ。
  うわーすげー。がんばってー。

  Re-Qさん他にも色々と映像を公開されていますこれの1分15秒からの映像が、噂に聞いた「顔暴走」ってやつですね。おお、素晴しい。
  映画の完成が楽しみであります。


  ふとYouTubeの「関連動画」を見ると、こんな映像も。
3D(立体)テレビ実験放送 [1984]
  お、大野しげひさ…シャチハタネーム…走れ!K-100…はっ、一瞬目まいが。ゴールデンタイムにこんな事してた時代もあったのね。

  そういえば昔キリンメッツの立体CMが有ったな、と思い出して探してみたら、有った(1987年)。当時のうちのテレビじゃちゃんと見えなくてくやしかったのよね。


  いきなりですが、z800のSDKを試してみました。とりあえずVisual C++ 2008 Express Edition全然オッケーです。

  内部データの読み出し/設定系は既にLabToolがあらかたやってくれてしまっているので今さら手を出すところは無さそうです。おっかないし。

  特筆すべきはジャイロ3軸、地磁気3軸、加速度3軸」なセンサーデータを直接いじれてしまう点でしょう。

これはライトサーベルせずにはいられません。

  という訳で、Z800 Saberです。z800を持っていなくても楽しめるキーボード版、マウス版もございます。よろしかったらどうぞ。



  お約束を?
!!無保証!!

以下のプログラムを実行することにより、
  • あなたのバソコンが再起不能になったり
  • 誰かと一緒にrule the galaxyしてみたくなったり
  • 彼女ができてしまったり
しても、当方は一切責任を負えません。自己責任でお試し下さい。



ついったやろうぜ
ブログ内検索
検索エンジンから来た人、思った結果が出なかったら再検索してちょ。
最新コメント
[08/27 BernardSr]
[08/27 BernardSr]
[08/27 BernardSr]
[12/29 GroverIcow]
[12/26 gayenKinesl]
[12/25 gayenKincfv]
[12/25 geRoesonokp]
[12/24 geRoesonmxu]
[06/30 LindsayDom]
[06/24 Ayukupim]
[06/22 francinerj2]
[06/21 Karsewis]
[06/17 Porsulik]
[06/16 Porsulik]
[06/16 Porsulik]
[06/16 Amimior]
[06/15 WilfordMof]
[06/11 lakeishatb1]
[06/04 Mathewlomi]
[05/31 tiopomWarriorvrp]
[05/31 Lasdumor]
[05/29 Aredorer]
[05/27 IMPUCKICT]
[05/26 Asosans]
[05/24 RaymondZice]
アクセス解析
カウンター
カレンダー
01 2025/02 03
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
プロフィール
HN:
mer2
性別:
男性
趣味:
野良猫の餌付け
Powered by ニンジャブログ  Designed by 穂高
Copyright © PCで立体視してみるぶろぐ All Rights Reserved
忍者ブログ / [PR]