ARDeskTop on Real Desktop
プロジェクターを実際の机に投影し、机を大きなディスプレイにして、ARDeskTopを実行してみるテストを行った。
机全体をディスプレイにしたかったのだが、大きいサイズに投影するにはそこそこ距離を取らない。
あまり大掛かりな設置装置がないので、鏡に一度反射させて机に投影させ、そこからB3サイズにくり抜くことにした。
鏡はロッカーの扉に付いてたのをへっぴがして使用。裏にホワイトボードマーカーをガムテで貼付け、マイクスタンドに挿した。
まず、B4用紙を二枚並べて、そこにぴったり投影できるように二次元の変換行列を求める。
PC側はこんな感じ。
続いて、ヘッドトラッキング用のWebカメラを置いて、そのWebカメラとディスプレイの位置関係をもう一台Webカメラを使って測定。
そして実行。
少し斜めに見えるけど、表示は成功。カーソルはうまく動作しなかった。部屋の明るさは暗めにせず普通のまま。
参考サイト:
射影変換 - OpenCV@Chihara-Lab.
http://chihara.naist.jp/opencv/?%BC%CD%B1%C6%CA%D1%B4%B9
スペシャルサンクス:
dandelion氏
http://www.atinfinity.info/blog/
ARToolKitでARDeskTopもどき(その10)
これまでとは異なったARDeskTopを動画にしてみた。ARDeskTopはアイデア次第でこんな風にも応用できる。
現状のディスプレイでは片目で見た方が良いが、3Dディスプレイが一般的になったら結構面白いと思う。
現在Youtubeなどで見られるARが似たようなものばかりになり、AR自体がなんだかつまらないものに感じてきたので、変わったものを作ろうと思った。どうせディスプレイの上のWebCamを使うならこう言うのはどうだろうかと思いついてから一週間ほどで完成した。
このシステムは計測ではWebCamが2台必要だが、操作のときは1台で済むのが売だ。
動画その5で行ったようにWebCamにマーカーを逆さにくっつけて、ディスプレイに表示されたマーカーとを映し合い、ディスプレイの上のWebCamとディスプレイの位置関係の行列を求める。
一度その行列を計算してしまえば、WebCamを動かさない限り、再計算の必要はない。
また。この動画はバーチャルリアリティよりも、Appleの3Dデスクトップ関係の特許ニュースに影響されている。
アップル、OSデスクトップを3D化する特許申請
アップル、上下左右から覗きこめるディスプレイシステムを特許出願
あとHMDがボロすぎる。640x480のHMDより目の前の26インチの液晶ディスプレイの方が遥かに綺麗で快適だ。
これまでのよりも悪い点は、ボタンをかなり手前に引っ張ってこないとクリック出来ない点だ。そうなるとつまりボタン自体がかなり大きく表示されてしまう。
カーソルも空間とディスプレイで若干ズレが生じるので操作に慣れが必要になる。
HSVでトゥーンレンダリング
法線ベクトルとか視線ベクトルとか使わずにトゥーンレンダリングやってみた。
床井研究室からサンプルを借りていじってみました。
http://marina.sys.wakayama-u.ac.jp/~tokoi/?date=20051006
一旦RGBからHSVに変換してVをスッテプさせて、RGBに戻すだけのお手軽トゥーンレンダリング。単純にRGBをポスタライズするよりかはキレイかなあ。
よく考えたらこれだとGLSL使わなくてもOpenCVだけでもいけそう。エッジは置いといて。
やっぱ違うか。
山下達郎のアルバムみたいにしたい人はいいかもね。
http://g-ec2.images-amazon.com/images/G/09/ciu/81/9c/f77446020ea03e3abbc89110.L.jpg
長野にインターネット回線が集中してる件
このサイトのインターネットのつながりを示すマップを世界地図と重ねると、なぜか長野に回線が集中しているように見える。
Chris Harrison - Internet Map: City-to-City Connections
http://www.chrisharrison.net/projects/InternetMap/index.html
不思議に思ったんで調べてみた。
どうも長野オリンピックでデジタル映像を配信するのにインフラを整備したっぽい。
http://i.impressrd.jp/files/images/bn/pdf/im199804-252-nagano.pdf
別のキャッシュを読むと、
長野オリンピック開催を機に光ネットワーク基幹網が整備され、当時、市内各校では約10Mbpsの高速回線が利用可能でした。2003年からは100Mbpsの大容量高速光回線「スーパーワイドLAN」で、全国に先駆け、学習を支える環境を整備しました。
とある。
こんなページもあった。
http://internet.watch.impress.co.jp/www/article/980220/olym.htm
でも確認しようとNTTに電話したら知らないっぽかった。
NTTでは常識かと思ってたんだけど。
Next Reality
工学ナビさんのブログにこんな事が書かれてあったのでついつい妄想してみました。
第2回となる今回は「VR→AR→?R」をメインテーマに,次世代のエキセントリックなアイデアを募集します.「マーカの上にただCGを出すのにはもう飽きた!!」という方の挑戦をお待ちしています.
http://kougaku.blog28.fc2.com/blog-entry-339.html
私が考えたのはER(Escaping Reality)「逃避現実」です。RR(Replaced Reality)「置換現実感」でもおk。
ERはこんな事に役立ちます。
・嫁さん(彼女、クラスメイト)の顔がアイドルになる(に見える)。
・部屋がキレイになる(に見える)。
・みんな中学生の顔で同窓会が開ける。
・怒ってる上司の顔が笑顔になる(に見える)。
などなど。
つまり、見たくないものにCGで蓋をする技術です(電脳コイルで既にやってるかもしれないですが)。
これにより人生が少しだけ楽になる・・・かもしれない。
ARにエフェクト(その2)
AR部だけにエフェクトかけるのに、OpenGLのアルファ値を取り出して、マスクを作る必要がある。アルファ値を取り出すのにglReadPixels関数を使っていたが、出来る時と出来ない時があった。
glReadPixels(0, 0, size.width, size.height, GL_RGBA, GL_UNSIGNED_BYTE, temp->imageData);
なんでかな〜と思い調べていると、glutInitDisplayMode関数の引数でGLUT_RGBAを使っていたけど、glut.h内のこれの定義がGLUT_RGBと同じになってた。
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
/* Display mode bit masks. */ #define GLUT_RGB 0 #define GLUT_RGBA GLUT_RGB
まさかと思い、glutInitDisplayMode関数の引数にGLUT_ALPHAを追加してみたら直った。
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_ALPHA | GLUT_DEPTH);
glReadPixels(0, 0, size.width, size.height, GL_RGB, GL_UNSIGNED_BYTE, temp->imageData); glReadPixels(0, 0, size.width, size.height, GL_ALPHA, GL_UNSIGNED_BYTE, alpha->imageData);