※この文書はGearVR FrameworkのドキュメントWriting a Basic GearVRf Applicationの2015年6月9日時点の翻訳です。
GearVRf APIの使用方法に慣れるために、基本的なアプリケーションを書いてみましょう。
このセクションの例として使われているsimplesample
GearVRfサンプルアプリケーションはGearVRfバナーを白い背景のVRワールドに表示します。
GearVRfはフルスクリーンで実行し、単一のViewを持っています。テーマ、メニュー、レイアウトは必要ありません。しかしGearVRfアプリケーションはAndroidリソース(strings, ints, drawables, assets, res/raw など)を使うことができます。
ステップ1 GVRActivityを継承してアクティビティを実装する
アクティビティを実装するために、GVRActivityを継承する必要があります。そしてGVRActivity.setScript
でデバイスXMLファイルとシーングラフを作成するためのGVRScript
オブジェクト(下記サンプルのSampleViewManager
)を提供することでアプリケーションを初期化します。
ウィザードによって生成されるアクティビティをGVRActivity
を継承するように変更しましょう。そしてonCreate()
をsetContentView()
の代わりにsetScript()
を呼ぶように変更しましょう。
package org.gearvrf.simplesample;
import android.os.Bundle;
import org.gearvrf.GVRActivity;
public class GalleryActivity extends GVRActivity {
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setScript(new SampleViewManager(), "gvr_note4.xml");
}
}
ステップ2 GVRScriptを継承してVRワールドを実装する
アプリケーションで主にやることは、スクリプトクラスを継承して必要に応じて変更することです。GVRScript
を継承した新しいクラスを作成してonInit()
とonStep()
コールバックを実装しましょう。
onInit
でやるべきことは次の通りです:
- 背景色の設定
- シーンオブジェクトで使用するメッシュとテクスチャーの読み込み
- それぞれのシーンオブジェクトを作成して、そのマテリアルと位置を設定する
- シーンオブジェクトをシーングラフに追加する
package org.gearvrf.simplesample;
import org.gearvrf.GVRContext;
import org.gearvrf.GVRScene;
import org.gearvrf.GVRSceneObject;
import org.gearvrf.GVRScript;
import org.gearvrf.GVRTexture;
import android.graphics.Color;
public class SampleViewManager extends GVRScript {
private GVRContext mGVRContext;
@Override
public void onInit(GVRContext gvrContext) {
// onStep()での使用に備えてフィールドに保持する
mGVRContext = gvrContext;
// 背景色の設定
GVRScene scene = gvrContext.getMainScene();
scene.getMainCameraRig().getLeftCamera()
.setBackgroundColor(Color.WHITE);
scene.getMainCameraRig().getRightCamera()
.setBackgroundColor(Color.WHITE);
// テクスチャーの読み込み
GVRTexture texture = gvrContext.loadTexture("GearVR.jpg");
// シーンオブジェクトの作成(このコンストラクターは標準の'unlit'シェーダーを使用する四角いシーンオブジェクトを作成します)
GVRSceneObject sceneObject = new GVRSceneObject(gvrContext, 4.0f, 2.0f, texture);
// シーンオブジェクトの位置を設定
sceneObject.getTransform().setPosition(0.0f, 0.0f, -3.0f);
// シーンオブジェクトをシーングラフに追加
scene.addSceneObject(sceneObject);
}
}
ステップ3 フレーム毎の処理をonStepメソッドに実装する
シーンオブジェクトをフレーム毎に動かす処理はここに書きます。shader uniformsを更新する時はこのメソッド内で行います。シーンプロパティをフレーム毎もしくは特定のフレームで調整したいなら、onStep
メソッドはそれらを変更するのに正しい場所です。OpenGL ESアプリケーションにとって、shader uniformの更新はフレーム毎に起こります。uniformの更新が起こるなら、更新はonStep
の中で行われる必要があります。
メモ: onStep
メソッドは空にしておくこともできます(頭の動きによる視点の変更のみの静的なシーンを描画するsimplesample
のように)。