ARを触ってみた
初投稿で何を投稿しようかなとネタを探していたのですが、
ARでTVっぽいものを作って表示させる課題をやったことがあったので、それを紹介します。
【環境】
・Windows10
・Visualstudio2013
・ARToolKit 2.72.1
・OpenCV 3.0.0
・GLUT3.7.6
ARではおなじみのARToolKitを使用しました。基本このARToolKitのsimpleLiteを元に作成しました。
①テレビをOpenGLで作る
CG技術のない学生が考えたテレビっぽいもの
(古い・・・)
全部四角でテレビを作ってみました。リアルを捨ててかわいい感じのテレビを目指しました。
四角の記述はこんな感じで4点を指定しています。
glVertex3d ( -0.4 , -0.4, 0.5);/* A*/ glVertex3d ( -0.3 , -0.4, 0.5);/* A1 */ glVertex3d ( -0.5 , -0.4, 0.0);/* A2 */ glVertex3d ( -0.6 , -0.4 , 0.0);/* A3 */
見えずらいのですが、足の側面や本体の側面は色を濃くして影っぽくしたりしています。
②カメラの映像を表示
先ほどのテレビにカメラからの映像を写してみます。
パソコンにつないだカメラからの映像がリアルタイムで写ります。これだけでも結構面白いです。
OpenCVから映像を取得し、画像に切り出して、先ほどのテレビの白い部分にテクスチャとして貼り付けています。
よく言われていることですが、OpenCVとOpenGLでは原点の位置が左上と左下と異なるので、変換してから貼り付ける必要があります。
capture >> frame ;
cv :: flip (frame , frame , 0);
(cv::flip()で反転させている)
③AR表示させる
マーカーの上にテレビを表示させてみます。
実際に表示されるとおおー!となります。
カメラ1でマーカーを写して、カメラ2でテレビの中の映像を写すといった感じです。
(カメラを両手に持ちながらさらにスクショをとるのが難しかった・・・)
④おまけ機能:色を変える
おまけとしてAR表示させた状態でテレビの色を変える機能をつけてみました。
実行中にキーボードの「R」「G」「B」を押すと、RGBの値がそれぞれ+0.1されます。
「E」「F」「V」を押すと逆にRGBの値が-0.1されます。
これで自分の好みの色にテレビの色が変えられます。
綺麗な色をピックアップしたもの
⑤おまけ機能:時間表示
おまけ2としてテレビといえば右上の時刻表示かな、と思ったのでやってみました。
現在時間はtime関数で取得できます。
time_t t = time ( NULL );
取得した時刻を文字データにして、画面右上に表示させます。
このときに画面上ぴったりに配置すると、テクスチャと同じ表面に表示されておかしなことになるので、画面の表面よりほんの少し前に出してあげるといいです。
見えにくいですが時間と曜日が表示されています。
【感想】
・ARToolKitを使うとすぐARで遊べて楽しい
・カメラを2台設定するのが難しかった。そこでかなり時間を取られた。
・CGでかっこいいリアルなTVを作ってみたい