17
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OthloTechAdvent Calendar 2017

Day 9

Vuforia + argon.js = ブラウザでAR

Last updated at Posted at 2017-12-09

こちらはOthloTech Advent Calendar 20179日目の記事です。

crssnkyです。

5年前くらいにARtoolkitで遊んでたのを思い出して、久しぶりにARやりたいなぁ。と思ってたところに、ブラウザでARができると知りました。
これならWindows使いのiPhone持ちという残念な僕の環境でもモバイルARアプリもどきが作れますね。
それならいっちょ試してみますか!っていう半年くらい前の掘り起こし。

試したこと

Vuforia + argon.js = ブラウザでAR
ターゲットの上に画像を重ねるAR

予備知識

  • AR(雰囲気で可)
  • three.js(雰囲気で可)
  • html + js(雰囲気で可)
  • 英語 Vuforiaの設定で必要(Google翻訳でたぶん可)

材料

  • Argon : argon.jsというフレームワークとArgon4というブラウザの組み合わせ。
    カメラ映像をブラウザ上に載せる特殊なブラウザ。
  • Vuforia : ARプラットフォーム。
    Unityと組み合わせると良い出汁が取れる。
  • 重ねる画像
    test.png

作り方

1. おまじないを唱える

ARの設定となる、いわゆる"おまじない"要素が多いため、argon.jsのTutorial — Part 4: Reference Frames and Vuforia Trackingを動くようにしておくと"おまじない"が終わる。
(つまり、https://github.com/argonjs/docs/tree/gh-pages/code/4-vuforia)

2. 画像を読み込む

サンプルの46行目,47行目からは、three.jsで使える3Dテキストのフォントの読込およびエフェクトの追加、3Dテキストモデルの生成までを行っている。
今回は文字ではなく画像を出したいので、ここを変える。

var loader = new THREE.TextureLoader();
loader.crossOrigin = "*";
loader.load(".png", function (tex) {
  var geometry = new THREE.PlaneGeometry(202.4, 101.2);
  mesh = new THREE.Mesh(geometry, new 
  THREE.MeshBasicMaterial({ map: tex }));
  argonTextObject.add(mesh);
  argonTextObject.scale.set(0.001, 0.001, 0.001);
});

まず、FontLoader()の代わりにTextureLoader()を宣言し、テクスチャを読み込めるようにする。
そして読み込んだら、画像を貼るための板3Dモデルを生成し、そこに読み込んだテクスチャを貼り付ける。
その後はARで操作したいオブジェクトをまとめた(今回は一個だけど)親オブジェクトであるargonTextObjectへ追加し、見えにくいくらい小さくしておく。

3. ARの動作

サンプルの108行目からは実際にARの動作を記述している。
init()encryptedLicenseDataはVuforiaのライセンスを暗号化したものを載せる。ちなみに、ドメインを限定する情報も付加できる。→https://docs.argonjs.io/start/vuforia-pgp-encryptor/
無事通過できたら、ARのターゲットが記述されたDatasetを読み込む。

// the vuforia API is ready, so we can start using it.
// tell argon to download a vuforia dataset. The .xml and .dat file must be together
// in the web directory, even though we just provide the .xml file url here

Vuforiaでは、なんに使うにしてもARのターゲットに関する情報をまとめてDatasetとして登録して、それを使うという方法を取る。https://developer.vuforia.com/target-manager
それができたら、そのターゲット情報から一つ選んでカメラに映った時の動作を決める。それがサンプル129行目以降。updateEventなので、描画ループ毎に呼ばれる。
gvuBrochurePoseはカメラから見たターゲットの位置、向き、状態である。これがArgon.PoseStatusと比べてどう一致するかを記述する。

  • KNOWN:追従可能の時ずっと
  • FOUND:追従可能になった瞬間
  • LOST:追従不可になった瞬間

KNOWNの場合
gvuBrochureObjectというターゲットに常に追従する空オブジェクトの位置をターゲットの位置と合わせる。
FOUNDの場合
gvuBrochureObjectへ追従させたいものをまとめたオブジェクトargonTextObjectを追加し、gvuBrochureObject内でのLocalPositionを0にする。
LOSTの場合
gvuBrochureObjectとは関係ないオブジェクトuserLocation(ユーザー視点に追従)へargonTextObjectを追加し、視界外へ避難させる。

以上で完成です。

実際にやってみた

2017-12-09 17.14.00.jpg

2017-12-09 17.14.18.png
上が普通のカメラで撮った写真。
下がそのままの位置を維持して、「SNICKERS」の文字に合わせて画像をARしているスクショ。(THREE.PlaneGeometry(202.4, 101.2)したので横長です。)

ARなんだから動いてないと意味ないだろ。というわけで、前にサンプルを動かした時の動画を置いておきます。物体の上でも綺麗に追従していますね。
Vuforia + argon.js

締め

以上で「Vuforia + argon.js = ブラウザでAR」を終わります。
半年前はiOSしか無かったArgon4も、今秋からAndroid版も配信され、マルチプラットフォームで気軽にブラウザARができる時代になりました。
これを機に冬休みは、ARで遊んでみるのも一興ではないでしょうか。
今回のやつ→https://github.com/crssnky/argonjsARsample

17
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?