Google Cardboard Tutorial の翻訳


このページは Google Cardboard Tutorial の翻訳です。

チュートリアル
このドキュメントは、自分で VR (仮想現実) アプリを作成するために、実験的なVRツールキットを使用する方法について説明します。

アンドロイドのデモ・アプリ: 宝探し
このチュートリアルの中のコード例は、デモ・アプリ 宝探し から取得できます。

カードボードは、VRプラットフォームとしてあなたのスマホの力を広げるシンプルな装置です。 たった2ドルにもかかわらず、カードボードはあなたのスマホに、双眼でのレンダリングや頭部の動きのトラッキングや磁石によるアプリへの指示などを備えた、3D画面を提供します。 デモ・アプリ「宝探し」ではこれらの機能が使用されています。 このゲームでは、ユーザは宝物をできるだけ早く見つけて集めるために、ディジタルの世界を見て回ります。 これは初歩的なゲームですが、カードボードのコアとなる機能をデモします。

ゲームのやり方
「宝探し」ゲームは、3Dテキストとして描画られた指示で始まります。 ユーザは、宝物を見つけた場合に、磁石を動かすように指示されます。

20140728_cardborad_cube1
これはスマホの画面に表示されたものです。 カードボードで見たときには、3D画面として表示されるでしょう。

ユーザが、立方体 (宝物) を画面中央に持ってくると、立方体は黄色に変色します。 立方体が黄色の間に、ユーザが磁石を動かすと、ユーザのスコアは増加します。 次に、立方体は新しい位置へ移動します。
20140728_cardborad_cube2

このアプリは、オブジェクトの表示に Open GL ES 2.0 を使用します。 このアプリは、ライティング、空間の移動、カラーリングなどのいくつかの基本的な機能をデモします。 このアプリは、入力として磁石を使用する方法や、ユーザが何かを見ているかどうかをチェックする方法や、左右の眼に対して異なる画面を表示して3Dイメージを描画方法を示します。

VR Toolkit JAR を取得する
カードボードのAPIを使用するためには、VR Toolkit jar ファイル をダウンロードして、プロジェクトにそれを含めてください。

manifest を編集する
デモ・アプリの manifest から、カードボードアプリのために必須な設定や推奨された設定を説明します。

下記に注意してください。
・uses-sdk android:minSdkVersion=”16″
デバイスがAPIレベル16 (Jellybean) あるいはそれ以上が実行できることを示します。

・uses-feature android:glEsVersion=”0x00020000″ android:required=”true”
デモ・アプリを実行するために、デバイスが Open GL ES 2.0 をサポートすることを示します。

・android:screenOrientation=”landscape”
アクテビティの必要な画面の向きが landscape (横長) であることを示します。
これはVRアプリケーションのために設定しなければならない。
ツールキットによって使用されるビューや CardboardView は、フルスクリーンでlandscape モード (landscape、reverseLandscape、sensorLandscape) のときに描画されます。

・android:configChanges=”orientation|keyboardHidden”
たとえ、デモ・アプリがそれを持っていないも、このパラメータが設定されることが推奨されます。

・android.permission.NFC
カードボードの NFC タグにアクセスするために、このパーミッションを必要とします。

・android.permission.VIBRATE
スマホを振動させるパーミッションです。
振動は、ユーザに何かが起こったことを通知する仕組みです。

CardboardActivity を拡張する
CardboardActivity は、カードボードのアプリのコード作成の出発点です。 CardboardActivity は、カードボード装置に簡単に統合的な機能を追加する MainActivity です。 それは、カードボードと交信するためにイベントを検出します。 また、VRを描画するアクテビティを作成するときに、一般的に要求される詳細機能を操作します。

CardboardActivity が sticky immersive mode を使用することに注意してください。 このモードでは、システムUIは隠されて、コンテンツが画面全体に表示されます。 これはVRアプリとして必須の要求です。 アクテビティがフルスクリーン・モードのときにだけ、CardboardView は描画されるからです。 この機能の説明については、Using immersive Full-Screen Mode をご覧ください。

デモ・アプリの MainActivity は CardboardActivity を拡張しています。 MainActivity は次のインターフェースを実装します。
CardboardView.StereoRenderer
これは、描画のインターフェースです。 ビューに立体像を表示するための詳細機能をすべて委任します。 実装としては単純にビューを渡すべきです。 これが、そのビューが提供する様々な変換のパラメーターを使用するために、通常行なわれる手続きです。 全ての立体像の表示とひずみの修正は、ビューの内部で管理されてる描画の機能から、抽出されます。

CardboardView を取得する
アンドロイドのアプリ中のユーザ・インターフェース要素は、すべてビューを使用して構築されます。 VRツールキットは、VR描画に使用することができる GLSurfaceView を拡張したビュー CardboardView を提供します。 CardboardView は、立体的にコンテンツを描画します。 あなたのアクテビティの onCreate() メソッドにて CardboardView を初期化します。

ビューを描画する
一度 CardboardView を取得します。 描画機構にそれを関連させます。 次に、アクテビティに CardboardView を関連させます。 カードボードは、2種類の描画機構を支援します。 しかし、始める最も迅速な方法は CardboardView.StereoRenderer を使用することです。それはデモ・アプリが使用するものです。

CardboardView.StereoRenderer は以下の主要なメソッドを持っています。
onNewFrame() アプリが描画するたびにコールされる
onDrawEye() 異なるアイのパラメータを持つアイのビューからコールされる

これらの実装は、あなたが OpenGL アプリのために通常行うことに似ています。 これらの方法は、次の項でより詳細に説明されます。

onNewFrame を実装する
個々のアイが描画される前に、描画の論理をエンコードするために、onNewFrame() メソッドを使用する。 単一のビューに特有ではないどんな操作もここで実行されるべきである。 これはあなたのモデルを更新するのによい場所である。 このコード例では、変数 mHeadView を、ヘッダ部に持っている。 ユーザが宝物を見ているかどうか伝えることを、後からも出来るように、この値を保存する必要がある。

onDrawEye を実装する
アイごとの設定をするために onDrawEye() を実装する。 これは描画するコードの実質的な部分です。そして規則的な Open GL ES2 アプリケーションの構築に非常に似ている。 次のコード例は、ビュー変換マトリクスを得る方法、およびさらに透視変換マトリックスを教えます。 ローレイテンシーで描画することを確かめる必要があります。 そうでなければ、EyeTransform は、アイのための変形と投影のマトリックスを持っています。

以下はイベントのシーケンスです。
・宝物がアイの空間に入ってきます。
・私たちは投影マトリックスを適用します。これは、指定されたアイに対して描画された場面を提供します。
・ツールキットは最終的に場面を描画するためにひずみを自動的に適用します。

カードボードの入力ハードウェア
カードボードはアンドロイドのアプリとの交信のために、次のハードウェア部品を持っています:

・磁石
磁石は押しボタンを作成するために使用されます。
あなたが磁石を押す場合、磁界は変わり、あなたのスマホの磁力計によって検知されます。 これはデモ・アプリ中の操作する引き金として使用されます。
MagnetSensor.OnCardboardTriggerListener がコールされます。 このとき動作は インターフェースの親アクテビティ (Cardboardアクテビティ) の実装によって提供されます。

・NFC タグ
あなたが、アンドロイドのデモ・アプリを持っているカードボード機器を、装着したときに、NFC はデモ・アプリの起動を引き起こします。
NfcSensor.OnCardboardNfcListener がコールされます。
このとき動作は、インターフェースの親アクテビティ (CardboardActivity) の実装によって提供されます。

下記に説明するように、これらの部品を使ったアプリとの連携を、あなたがプログラム的に変更することができます。

磁石を動かしたときのリスナー
ユーザが磁石を動かした場合に、カスタマイズされた振る舞いを提供するためには、アプリのアクテビティ中の CardboardActivity#onCardboardTrigger() を無視してください。 宝探しアプリの中で、宝物を見つけて、磁石を引けば、宝物を獲得するようになります:

NFC の動作をカスタマイズする
「CardboardActivity を拡張する」の項で、すでに述べたように、CardboardActivity 基底クラスは NfcSensor.OnCardboardNfcListener インターフェースを持っています。 スマホがカードボードに挿入される場合は、常にこのメソッドが呼ばれます。

VR (双眼鏡) モードのオン/オフを切り替えるために、NfcSensor.OnCardboardNfcListener、onInsertedIntoCardboard()、onRemovedFromCardboard() を上書きすることができます。
したがって、VRモードをオフすることで、カードボードなしで宝探し仕事を作ることも出来ます。
CardboardView#setVRModeEnabled( false ) を使用します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です