サブタイトル:「mer2のマイノリティ・レポート(笑)」 --- 最近忍者ブログの仕様が変わったようで、一部の画像が見えなくなってますが、画像のURLコピペで見られます。(どうしよう困ったな) --- ご用件など、ございましたらtwitterまでどうぞ。
息抜きついでに、この記事の最後に書いたARToolkitをz800で立体視実験をやってみました。どうせ上手くいかないよ、とか思いながら。
デュアルモニター状態で、一方でARToolkitを表示+キャプチャーしつつ、さらに一方でz800でモニターできるようにしなくてはなりません。
nvidiaで言うところの「デュアルビュー」にします。z800の立体視はフルスクリーン必須なので、z800のVGAOUTに繋いであるCRTモニターをプライマリモニタに設定します。
セカンダリ: ARToolkit(サイドバイサイドで表示) ->
セカンダリ: ManyCam(キャプチャー) ->
プライマリ: Stereoscopic Player(ページフリップ化) ->
プライマリ: z800(立体視)
という流れで行ってみましょう。
あら、ManyCamはプライマリモニターしかキャプチャーできないみたい。キャプチャー範囲の枠がプライマリモニターの外に出てくれません。意外なManyCamの欠点を発見しました。
VH Screen Capture Driverを使うことにしました。こいつはかなり細かい取り込み指定ができる優秀なヤツです。でも心持ちManyCamのほうが取り込みレートが高かったので、私はManyCamをメインで使ってます。
VH Screen Capture Driverはプライマリモニターもセカンダリモニターも自由自在のようです。よしよし。取り込み範囲を設定。VH Screen Capture Driverはドット単位で取り込み範囲の微調整ができます。このへんは本当に良くできてます。
準備完了。Stereoscopic Playerをnvidaモードでフルスクリーンにします。
nvidaモードを発動すると、エラー発生。Direct Xうんぬんのエラーです。根が深そうです。ほら、やっぱり駄目だ。
それではと、Stereoscopic Playerをあきらめてステレオムービープレイヤーを使ってみることにします。結局、
セカンダリ: ARToolkit(サイドバイサイドで表示) ->
セカンダリ: VH Screen Capture Driver(キャプチャー) ->
プライマリ: ステレオムービープレイヤー(ページフリップ化) ->
プライマリ: z800(立体視)
となりました。
焦る私。でも表示が変です。画像は上半分中央にクォーター表示だし、ページフリップしてません。表示されているのは片目分だけです。いろいろ設定をいじっていたら、
z800で立体視版ARToolkitのリアルタイムモニターできちゃいました!
いまいち信頼性に欠ける証拠写真。クリックで拡大。
nvidaステレオドライバーのキャプチャーです。奥のCRTモニターがページフリップしてるでしょ。
どこがどうに作用してうまくいったのかをいまいち把握できていないので、設定画面をそのまま載せときます。
VH Screen Capture Driverの設定
ステレオムービープレイヤーの設定
できることはできましたが、320x240を800x600にスケーリングしている上に、z800とステレオムービープレイヤーの相性の悪さも手伝って、画像はガチャガチャです。今の環境にはまだ必殺技も仕込んでないし。
おまけにかなり重くなっています。ステレオドライバー発動前でARToolkitのfpsは5~6ぐらい。ステレオドライバー発動でもうちょっと重くなっているかんじです。
まあ、いちおうできましたよっ、程度のものです。いやできるとは思ってなかったんだけど。
しかし落胆するのはまだ早い。実はz800SDKのサンプルプログラムには「Sample_OpenGL_StereoVision」というのが入っています。これ のOpenGL版みたいなもんだと思われます。もちろんglut使ってます。これはもしかするともしかします。
[ステレオドライバーを使わずに、ARToolkitのプログラムから直接立体視ができてしまうかもしれません。](自信が無いのでステルスモード。)
試しにビルドしてみましたが、やはり一発ビルドは無理のようです。ああ、茨の道が。しかしここは一発、z800の明るい未来の為に頑張ってみたいと思っています。
デュアルモニター状態で、一方でARToolkitを表示+キャプチャーしつつ、さらに一方でz800でモニターできるようにしなくてはなりません。
nvidiaで言うところの「デュアルビュー」にします。z800の立体視はフルスクリーン必須なので、z800のVGAOUTに繋いであるCRTモニターをプライマリモニタに設定します。
セカンダリ: ARToolkit(サイドバイサイドで表示) ->
セカンダリ: ManyCam(キャプチャー) ->
プライマリ: Stereoscopic Player(ページフリップ化) ->
プライマリ: z800(立体視)
という流れで行ってみましょう。
あら、ManyCamはプライマリモニターしかキャプチャーできないみたい。キャプチャー範囲の枠がプライマリモニターの外に出てくれません。意外なManyCamの欠点を発見しました。
VH Screen Capture Driverを使うことにしました。こいつはかなり細かい取り込み指定ができる優秀なヤツです。でも心持ちManyCamのほうが取り込みレートが高かったので、私はManyCamをメインで使ってます。
VH Screen Capture Driverはプライマリモニターもセカンダリモニターも自由自在のようです。よしよし。取り込み範囲を設定。VH Screen Capture Driverはドット単位で取り込み範囲の微調整ができます。このへんは本当に良くできてます。
準備完了。Stereoscopic Playerをnvidaモードでフルスクリーンにします。
Stereoscopic PlayerにHYTEK General Stereo 3D Camera Driverを直接接続テストしてみると、320x240ならSoftware Pageflippingオーケーでしたが、640x480だとSoftware Pageflippingに破綻が生じてしまいまっていました。
そんな訳で、このケースではSoftware Pageflippingを使うのはまず無理でしょう。
nvidaモードを発動すると、エラー発生。Direct Xうんぬんのエラーです。根が深そうです。ほら、やっぱり駄目だ。
それではと、Stereoscopic Playerをあきらめてステレオムービープレイヤーを使ってみることにします。結局、
セカンダリ: ARToolkit(サイドバイサイドで表示) ->
セカンダリ: VH Screen Capture Driver(キャプチャー) ->
プライマリ: ステレオムービープレイヤー(ページフリップ化) ->
プライマリ: z800(立体視)
となりました。
あれ、nvidaモードでフルスクリーンできちゃったぞ。
焦る私。でも表示が変です。画像は上半分中央にクォーター表示だし、ページフリップしてません。表示されているのは片目分だけです。いろいろ設定をいじっていたら、
おい、できちゃったよ。
z800で立体視版ARToolkitのリアルタイムモニターできちゃいました!
いまいち信頼性に欠ける証拠写真。クリックで拡大。
nvidaステレオドライバーのキャプチャーです。奥のCRTモニターがページフリップしてるでしょ。
どこがどうに作用してうまくいったのかをいまいち把握できていないので、設定画面をそのまま載せときます。
VH Screen Capture Driverの設定
ステレオムービープレイヤーの設定
できることはできましたが、320x240を800x600にスケーリングしている上に、z800とステレオムービープレイヤーの相性の悪さも手伝って、画像はガチャガチャです。今の環境にはまだ必殺技も仕込んでないし。
おまけにかなり重くなっています。ステレオドライバー発動前でARToolkitのfpsは5~6ぐらい。ステレオドライバー発動でもうちょっと重くなっているかんじです。
まあ、いちおうできましたよっ、程度のものです。いやできるとは思ってなかったんだけど。
しかし落胆するのはまだ早い。実はz800SDKのサンプルプログラムには「Sample_OpenGL_StereoVision」というのが入っています。これ のOpenGL版みたいなもんだと思われます。もちろんglut使ってます。これはもしかするともしかします。
[ステレオドライバーを使わずに、ARToolkitのプログラムから直接立体視ができてしまうかもしれません。](自信が無いのでステルスモード。)
試しにビルドしてみましたが、やはり一発ビルドは無理のようです。ああ、茨の道が。しかしここは一発、z800の明るい未来の為に頑張ってみたいと思っています。
PR
私はドバイ編の「斥候軍曹」がツボに来て、そのへんから読み始めた人なのですが、以前床屋に最初の頃の単行本が置いてあったのを読んでみたら、沖田くんに表情が有るので驚きました。
んなこたどうでもいいんです。ここ数日、z800のオフィシャルフォーラムが落ちたままです。ああ不安だ。
んなこたどうでもいいんです。ここ数日、z800のオフィシャルフォーラムが落ちたままです。ああ不安だ。
z800のモーションセンサーについて調べてみたら、こんなページを発見しました。Linux用z800ドライバのページです。ちょっとバージョンが上ってますね。ううっ、これも試したい。
このページによると、z800のモーションセンサーはNec-Tokin製のMDP-A3U9Sというのが使われているそうです。なんと日本製です。
このへんにはMDP-A3U9Sの3Dモーションセンサーについての詳しい解説が有ります。この解説を読むと、MDP-A3U9Sはジャイロセンサーの値を加速度センサーと地磁気センサーで補正する事によって正確なモーションセンシングを行なう仕組みになっているそうです。
もしかして現状のz800はこの仕組みを使っていない疑惑が!!だってz800のヘッドトラッキングはあんまり正確じゃ無いんだもん。
どうもこの補正はデベロッパーキットのソフトウェア上で行なっている気配です。うーん、デベロッパーキット欲しい。もしくはソース見せろ。
このセンサーの値段を調べてみたら、なんと驚け!旧価格でz800買った人、あなたは幸せ者ですよ。大事にしましょう。
…と思ったけど、他にもMDP-A3U9Sを搭載している市販品が有りました。SEMB1200A-AB02。あれ?ちょっと安いぞ。このボードのMDP-A3U9S未搭載バージョンSEMB1200A。あれれ?差額1万弱ぐらいですね。まあいいや。
気を取り直して、センサー関係のプログラミング例を探してみましたが、国内には無さそうですね。こんなセンサーの使用例が有りました。センサーは違えど、センサーの機能はMDP-A3U9Sと同じです。へーこんなことできるんだ。
あと、この手のセンサーはロボット製作でよく使われているようです。上のSEMB1200A-AB02も、ロボット製作用のパーツです。このパーツを使ったロボット製作なページ。ここの下のほうに有るロボットの動画を見てやって下さい。カ…カワユス。また新しい世界を知ってしまいました。
このページのgifアニメーションは分かりやすいですね。
ジャイロセンサーと加速度センサーの解説。
z800に磁石を近づけると危険!!らしい
ちょっと気になったのでVR920のセンサーについても調べてみました。こちらによると、YawとPitch、Rollを2つのセンサーに分けて取っているようです。Yawデータは方位磁石方式だそうです。へー。でも解説によるとz800と同じく精度はいまいちみたい。
このページによると、z800のモーションセンサーはNec-Tokin製のMDP-A3U9Sというのが使われているそうです。なんと日本製です。
このへんにはMDP-A3U9Sの3Dモーションセンサーについての詳しい解説が有ります。この解説を読むと、MDP-A3U9Sはジャイロセンサーの値を加速度センサーと地磁気センサーで補正する事によって正確なモーションセンシングを行なう仕組みになっているそうです。
な、なんだってー!!ΩΩΩ
もしかして現状のz800はこの仕組みを使っていない疑惑が!!だってz800のヘッドトラッキングはあんまり正確じゃ無いんだもん。
どうもこの補正はデベロッパーキットのソフトウェア上で行なっている気配です。うーん、デベロッパーキット欲しい。もしくはソース見せろ。
このセンサーの値段を調べてみたら、なんと驚け!旧価格でz800買った人、あなたは幸せ者ですよ。大事にしましょう。
…と思ったけど、他にもMDP-A3U9Sを搭載している市販品が有りました。SEMB1200A-AB02。あれ?ちょっと安いぞ。このボードのMDP-A3U9S未搭載バージョンSEMB1200A。あれれ?差額1万弱ぐらいですね。まあいいや。
気を取り直して、センサー関係のプログラミング例を探してみましたが、国内には無さそうですね。こんなセンサーの使用例が有りました。センサーは違えど、センサーの機能はMDP-A3U9Sと同じです。へーこんなことできるんだ。
あと、この手のセンサーはロボット製作でよく使われているようです。上のSEMB1200A-AB02も、ロボット製作用のパーツです。このパーツを使ったロボット製作なページ。ここの下のほうに有るロボットの動画を見てやって下さい。カ…カワユス。また新しい世界を知ってしまいました。
このページのgifアニメーションは分かりやすいですね。
ジャイロセンサーと加速度センサーの解説。
z800に磁石を近づけると危険!!らしい
ちょっと気になったのでVR920のセンサーについても調べてみました。こちらによると、YawとPitch、Rollを2つのセンサーに分けて取っているようです。Yawデータは方位磁石方式だそうです。へー。でも解説によるとz800と同じく精度はいまいちみたい。
色々と期待していた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ユーザー限定)。
こんなんなります。
各データを表示しただけではさっぱりなので、差分も表示させてみました。それでも分かりづらいですが。グラフィカルに表示すると分かりやすくなりそうですが、私にはそんな事ほえっとできる程のスキルはございません。ご了承下さい。
分かりづらいなりにも、しばらくいじっていると傾向は掴めます。
・ 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はゴーグル部分を垂直に立てておくと確実に接続できるみたいです。あっという間に繋がります。ゴーグル部分が水平になってると接続に失敗してしまうみたいです。
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ユーザー限定)。
こんなんなります。
各データを表示しただけではさっぱりなので、差分も表示させてみました。それでも分かりづらいですが。グラフィカルに表示すると分かりやすくなりそうですが、私にはそんな事ほえっとできる程のスキルはございません。ご了承下さい。
分かりづらいなりにも、しばらくいじっていると傾向は掴めます。
・ 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はゴーグル部分を垂直に立てておくと確実に接続できるみたいです。あっという間に繋がります。ゴーグル部分が水平になってると接続に失敗してしまうみたいです。
新ドライバが面白すぎて飛ばし過ぎてしまった感が否めないので、少しz800について冷静に補足しておきます。私のベタ褒め文章を読んで期待しすぎて24万円に手を出そうかななんて真剣に悩んでいる人がいないとも限らない気がしてきたので。
8万円で買えた頃だったらz800はかなりお勧め商品でしたが、24万円出す価値が有るかというとちょっと疑問です。所詮は800x600です。現状でz800に24万円出すんだったら、1280x780でLCosなTDVisorを待ってみたほうがいいと思います。ちょっとあれはz800とは方向性が違う製品ではありますが。
有機ELと聞くと最近ソニーから出たアレを思い浮かべてしまうと思いますが、同じ有機ELでもあれとはモノが違うみたいです。あんなに綺麗な画面ではありません。ややノイジーな画面です。それでも液晶パネルのHMDとは違うレベルの発色をしてるとは思いますが。
新ドライバになって映画等の2D映像が見やすくなったのは確かですが、どうしてもz800で映画等を見たくなるかと言えばそんな事は無いです。私としてはz800で映画を見るんだったら、19インチ液晶のほうが楽でいいです。やはりHMDは目が疲れます。
あくまで私は「いじって楽しいパソコンの周辺機器」というスタンスでz800を楽しんでいます。AV機器的な物を求めてz800を購入してしまうと後悔してしまうかもしれません。っていうかそういう人が多かったみたいです。
色調整について追記:
本体内部の色調整に加えて、nvidiaコントロールパネルの「カラー補正」でガンマをちょこっといじると青の発色が良くなりました。なんか以前と同じ事をしているみたいですが、本体内部の色調整が効いているので以前ほど極端にガンマをいじらないでもいい色になります。まあこんもんでいいかな。
8万円で買えた頃だったらz800はかなりお勧め商品でしたが、24万円出す価値が有るかというとちょっと疑問です。所詮は800x600です。現状でz800に24万円出すんだったら、1280x780でLCosなTDVisorを待ってみたほうがいいと思います。ちょっとあれはz800とは方向性が違う製品ではありますが。
有機ELと聞くと最近ソニーから出たアレを思い浮かべてしまうと思いますが、同じ有機ELでもあれとはモノが違うみたいです。あんなに綺麗な画面ではありません。ややノイジーな画面です。それでも液晶パネルのHMDとは違うレベルの発色をしてるとは思いますが。
新ドライバになって映画等の2D映像が見やすくなったのは確かですが、どうしてもz800で映画等を見たくなるかと言えばそんな事は無いです。私としてはz800で映画を見るんだったら、19インチ液晶のほうが楽でいいです。やはりHMDは目が疲れます。
あくまで私は「いじって楽しいパソコンの周辺機器」というスタンスでz800を楽しんでいます。AV機器的な物を求めてz800を購入してしまうと後悔してしまうかもしれません。っていうかそういう人が多かったみたいです。
色調整について追記:
本体内部の色調整に加えて、nvidiaコントロールパネルの「カラー補正」でガンマをちょこっといじると青の発色が良くなりました。なんか以前と同じ事をしているみたいですが、本体内部の色調整が効いているので以前ほど極端にガンマをいじらないでもいい色になります。まあこんもんでいいかな。
最新記事
(04/20)
(11/21)
(01/01)
(06/12)
(06/12)
(05/29)
(05/22)
(05/21)
(12/25)
(12/20)
最新コメント
[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
性別:
男性
趣味:
野良猫の餌付け