拡張現実感(Augmented Reality:AR)という言葉を聞いてどんなものを思い浮かべますか? 風景にケータイをかざすとそこにCGのキャラクタが見えたり,建物の説明書きが見えたりというイメージでしょうか. 本書では,現実に情報を重ねるだけでなく,その一歩先である「実世界とのフィジカルなインタラクション」というところにフォーカスしました. 具体的には,センサで計測した情報をARで提示したり,ARを介してカメラ画像に写っている家電をコントロールしたりということができる内容になっています.

本書では,Processingとのファーストコンタクトを終えた人がARを作りたい!という野望をかなえられるように, ARToolKit,Arduino,Twitter,Kinect,AR.Droneなどのさまざまな道具を連携させる方法を解説しています. また,それらを組み合わせた応用例のレシピも紹介しています. AR関連の小ネタもたくさん盛り込みましたので,読み物としてもお楽しみください.

本書を読んで,あなたの妄想をカタチにしてください.そして面白い作品ができたらぜひご一報ください.

(最終更新日:2012年4月8日)

各種リンク



 


ソースコード

本書掲載のソースコードです.使用している画像ファイルやパターンファイルも同梱していますが, フォントファイル(*.vlw)については同梱していませんのでご自分で作成してください.


(2012/05/31) TwittARのソースコードを修正しました.

読者の声

【レビュー】BOOK REVIEW - ARプログラミングで現実をコントロールしてみよう | マイナビニュース

大木さん(@Ohki)が書評&製作記事を書いてくださいました! ありがとうございます! (ソースコードはこちら



(随時追加します!)

正誤情報

Q&A



「外部ライブラリの導入の仕方」(P.33)で説明されている「ライブラリ名を冠したフォルダ」ってどういう意味ですか?

Processingのライブラリはjarという形式のファイルで提供されています. このjarファイルが入っているlibraryフォルダの1つ上の階層のフォルダはjarファイルと同じ名前でなくてはいけません. つまり,「ライブラリ名を冠したフォルダ」とはjarと同じ名前のフォルダという意味です(もちろん拡張子の「.jar」は除きます). これについての詳しい解説は How to Install a Contributed Library - Processing にあります.

外部ライブラリの多くは,バージョン名がzipファイルの名前に含まれた状態で配布されています. 解凍時にでてきたフォルダの名前にバージョン名などが含まれていてjarファイルの名前と異なる場合には,フォルダ名を修正する必要があります.

例えばNyAR4psgの場合,配布されているzipファイルを解凍すると「nyar4psg-1.1.6」という感じのフォルダ名になりますが,これを「nyar4psg」と修正する必要があります. SourceForgeやGitHubで配布されているライブラリではこういうことが良くあるので注意してください.ちなみに大文字小文字は区別されないようです.



フォントはどうやって設定するのですか?

本書で紹介しているいくつかのプログラムでは,フォントを設定するためにvlwファイルをロードしています.これについて補足説明します.



WindowsでCaptureを使うプログラムがうまく動作しないのですが,どうすれば?

いくつかの選択肢があります.以下を参考にしてください.



obj形式の3DモデルをARで表示するにはどうしたらいいですか?

obj形式の3Dモデルを表示するためのライブラリとしてOBJ Loader (saitoobjloader)があります. このライブラリをダウンロードしてインストールしてください. OBJ LoaderとNyAR4psgを組み合わせて,マーカの上に3Dモデルを表示するサンプルプログラムを以下に示します. cassini.objはOBJ Loaderに同梱されている土星探査機のモデルデータです.

					import jp.nyatla.nyar4psg.*;  // ARToolKit
					import processing.video.*;    // ビデオライブラリ
					import saito.objloader.*;     // objローダ
					
					Capture     cam;   // キャプチャ
					MultiMarker ar;    // ARマーカに関する処理をするオブジェクト
					int         id;    // マーカに割り当てられるID番号
					OBJModel    model; // 3Dモデル 
					
					void setup() {
					  size(640, 480, P3D);
					  
					  // ARをやるための準備  
					  cam = new Capture(this, width, height);
					  ar = new MultiMarker(this, width, height, "camera_para.dat", NyAR4PsgConfig.CONFIG_PSG);
					  id = ar.addARMarker("patt.hiro", 60);
					
					  // 3Dモデルの準備
					  model = new OBJModel(this, "cassini.obj", "absolute", TRIANGLES);
					  model.scale(5);
					  model.translateToCenter();
					  noStroke();
					}
					
					void draw() {
					  if (cam.available() == false) return; // カメラの準備ができてないときは何もしない
					  cam.read();                           // カメラ画像の読み込み
					  background(0);                        // 画面の初期化
					  ar.drawBackground(cam);               // 背景画像の描画
					  ar.detect(cam);                       // マーカ認識

					  lights(); // ライティング
					
					  if (ar.isExistMarker(id)) {
					    ar.beginTransform(id);
					      translate(0, 0, 15);  // 3Dオブジェクトの表示位置の調整
					      model.draw();         // 3Dオブジェクトの描画
					    ar.endTransform();
					  }
					}
					



CGが実物体の陰に隠れた状態を表現するにはどうしたらいいですか?

重畳したいCGを描くときに,一緒に実物体と同形状のCGを描くことによって,実物体によってCGの一部が隠れて見えない状態を作ることができます. 実物体の形状があらかじめわかっているときは,そのCGモデルを用意しておき,ARマーカを使って実物体と同位置に重ねます. 詳しいやり方を以下で解説しています. Processingでオクルージョン表現のあるARを作る


Kinectがあれば,実空間の凹凸形状を計測して,CGの隠れ表現に使うことができます.これについては後日紹介します.



何か面白そうな素材はありませんか?

なんという無茶振り! 面白いものを見つけ次第追加します.