[VuforiaでARアプリ] 「Video Playback Sample」 に動画を追加 [Androidアプリ]






サンプルプログラムのビルドや開発環境については前の記事
前回:http://taku-note.blogspot.jp/2014/10/eclipsevuforia.html






まず、サンプルプログラムの中に入っている「VideoPlayback.java」を編集します。


「VideoPlayback.java」

VideoPlayback 65行目辺り
「NUM_TARGETS」に動画の数を入力
今回は追加する動画を「HYOUSHI」とします。


// Movie for the Targets:
    public static final int NUM_TARGETS = 3; //追加コード
    public static final int STONES = 0;
    public static final int CHIPS = 1;
    public static final int HYOUSHI = 2; //追加コード


VideoPlayback 156行目辺り
「mMovieName」に新しい動画のファイル名を指定します。

        mMovieName[STONES] = "VideoPlayback/VuforiaSizzleReel_1.m4v";
        mMovieName[CHIPS] = "VideoPlayback/VuforiaSizzleReel_2.m4v";
        mMovieName[HYOUSHI] = "VideoPlayback/Hyoushi.wmv"; //追加コード


VideoPlayback 256行目辺り
サムネイルテクスチャを追加します。これは動画が再生される前に画面に表示する画像です。

// We want to load specific textures from the APK, which we will later
    // use for rendering.
    private void loadTextures()
    {
        mTextures.add(Texture.loadTextureFromApk(
            "VideoPlayback/VuforiaSizzleReel_1.png", getAssets()));
        mTextures.add(Texture.loadTextureFromApk(
            "VideoPlayback/VuforiaSizzleReel_2.png", getAssets()));
        mTextures.add(Texture.loadTextureFromApk(
                "VideoPlayback/Hyoushi.png", getAssets()));  //追加コード
        mTextures.add(Texture.loadTextureFromApk("VideoPlayback/play.png",
            getAssets()));
        mTextures.add(Texture.loadTextureFromApk("VideoPlayback/busy.png",
            getAssets()));
        mTextures.add(Texture.loadTextureFromApk("VideoPlayback/error.png",
            getAssets()));
    }



次に「VideoPlaybackRenderer.java」を編集します。


「VideoPlaybackRenderer.java」

VideoPlaybackRenderer 73行目辺り

private float videoQuadTextureCoordsTransformedStones[] = { 0.0f, 0.0f,
            1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, };
private float videoQuadTextureCoordsTransformedChips[] = { 0.0f, 0.0f,
            1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, };
private float videoQuadTextureCoordsTransformedHyoushi[] = { 0.0f, 0.0f,
            1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, }; //追加コード


VideoPlaybackRenderer 531行目辺り

if (imageTarget.getName().compareTo("stones") == 0)
                currentTarget = VideoPlayback.STONES;
            else  if (imageTarget.getName().compareTo("chips") == 0)
                currentTarget = VideoPlayback.CHIPS;
            else  if (imageTarget.getName().compareTo("動画を移したいモデルビュー名") == 0)
        currentTarget = VideoPlayback.HYOUSHI;


VideoPlaybackRenderer 647行目辺り

if (imageTarget.getName().compareTo("stones") == 0)
                    GLES20.glVertexAttribPointer(videoPlaybackTexCoordHandle,
                        2, GLES20.GL_FLOAT, false, 0,
                        fillBuffer(videoQuadTextureCoordsTransformedStones));
                else if (imageTarget.getName().compareTo("chips") == 0)
                    GLES20.glVertexAttribPointer(videoPlaybackTexCoordHandle,
                        2, GLES20.GL_FLOAT, false, 0,
                        fillBuffer(videoQuadTextureCoordsTransformedChips));
                else if (imageTarget.getName().compareTo("動画を移したいモデルビュー名") == 0)
                    GLES20.glVertexAttribPointer(videoPlaybackTexCoordHandle,
                        2, GLES20.GL_FLOAT, false, 0,
                        fillBuffer(videoQuadTextureCoordsTransformedHyoushi));


VideoPlaybackRenderer 862行目辺り

if (target == VideoPlayback.STONES)
        {
            tempUVMultRes = uvMultMat4f(
                videoQuadTextureCoordsTransformedStones[0],
                videoQuadTextureCoordsTransformedStones[1],
                videoQuadTextureCoords[0], videoQuadTextureCoords[1], mtx);
            videoQuadTextureCoordsTransformedStones[0] = tempUVMultRes[0];
            videoQuadTextureCoordsTransformedStones[1] = tempUVMultRes[1];
            tempUVMultRes = uvMultMat4f(
                videoQuadTextureCoordsTransformedStones[2],
                videoQuadTextureCoordsTransformedStones[3],
                videoQuadTextureCoords[2], videoQuadTextureCoords[3], mtx);
            videoQuadTextureCoordsTransformedStones[2] = tempUVMultRes[0];
            videoQuadTextureCoordsTransformedStones[3] = tempUVMultRes[1];
            tempUVMultRes = uvMultMat4f(
                videoQuadTextureCoordsTransformedStones[4],
                videoQuadTextureCoordsTransformedStones[5],
                videoQuadTextureCoords[4], videoQuadTextureCoords[5], mtx);
            videoQuadTextureCoordsTransformedStones[4] = tempUVMultRes[0];
            videoQuadTextureCoordsTransformedStones[5] = tempUVMultRes[1];
            tempUVMultRes = uvMultMat4f(
                videoQuadTextureCoordsTransformedStones[6],
                videoQuadTextureCoordsTransformedStones[7],
                videoQuadTextureCoords[6], videoQuadTextureCoords[7], mtx);
            videoQuadTextureCoordsTransformedStones[6] = tempUVMultRes[0];
            videoQuadTextureCoordsTransformedStones[7] = tempUVMultRes[1];
        } else if (target == VideoPlayback.CHIPS)
        {
            tempUVMultRes = uvMultMat4f(
                videoQuadTextureCoordsTransformedChips[0],
                videoQuadTextureCoordsTransformedChips[1],
                videoQuadTextureCoords[0], videoQuadTextureCoords[1], mtx);
            videoQuadTextureCoordsTransformedChips[0] = tempUVMultRes[0];
            videoQuadTextureCoordsTransformedChips[1] = tempUVMultRes[1];
            tempUVMultRes = uvMultMat4f(
                videoQuadTextureCoordsTransformedChips[2],
                videoQuadTextureCoordsTransformedChips[3],
                videoQuadTextureCoords[2], videoQuadTextureCoords[3], mtx);
            videoQuadTextureCoordsTransformedChips[2] = tempUVMultRes[0];
            videoQuadTextureCoordsTransformedChips[3] = tempUVMultRes[1];
            tempUVMultRes = uvMultMat4f(
                videoQuadTextureCoordsTransformedChips[4],
                videoQuadTextureCoordsTransformedChips[5],
                videoQuadTextureCoords[4], videoQuadTextureCoords[5], mtx);
            videoQuadTextureCoordsTransformedChips[4] = tempUVMultRes[0];
            videoQuadTextureCoordsTransformedChips[5] = tempUVMultRes[1];
            tempUVMultRes = uvMultMat4f(
                videoQuadTextureCoordsTransformedChips[6],
                videoQuadTextureCoordsTransformedChips[7],
                videoQuadTextureCoords[6], videoQuadTextureCoords[7], mtx);
            videoQuadTextureCoordsTransformedChips[6] = tempUVMultRes[0];
            videoQuadTextureCoordsTransformedChips[7] = tempUVMultRes[1];
        }
         else if (target == VideoPlayback.HYOUSHI)     //追加コード
        {
            tempUVMultRes = uvMultMat4f(
                videoQuadTextureCoordsTransformedHyoushi[0],
                videoQuadTextureCoordsTransformedHyoushi[1],
                videoQuadTextureCoords[0],
                videoQuadTextureCoords[1], mtx);
            videoQuadTextureCoordsTransformedHyoushi[0] = tempUVMultRes[0];
            videoQuadTextureCoordsTransformedHyoushi[1] = tempUVMultRes[1];
            tempUVMultRes = uvMultMat4f(
                videoQuadTextureCoordsTransformedHyoushi[2],
                videoQuadTextureCoordsTransformedHyoushi[3],
                videoQuadTextureCoords[2],
                videoQuadTextureCoords[3], mtx);
            videoQuadTextureCoordsTransformedHyoushi[2] = tempUVMultRes[0];
            videoQuadTextureCoordsTransformedHyoushi[3] = tempUVMultRes[1];
            tempUVMultRes = uvMultMat4f(
                videoQuadTextureCoordsTransformedHyoushi[4],
                videoQuadTextureCoordsTransformedHyoushi[5],
                videoQuadTextureCoords[4],
                videoQuadTextureCoords[5], mtx);
            videoQuadTextureCoordsTransformedHyoushi[4] = tempUVMultRes[0];
            videoQuadTextureCoordsTransformedHyoushi[5] = tempUVMultRes[1];
            tempUVMultRes = uvMultMat4f(
                videoQuadTextureCoordsTransformedHyoushi[6],
                videoQuadTextureCoordsTransformedHyoushi[7],
                videoQuadTextureCoords[6],
                videoQuadTextureCoords[7], mtx);
            videoQuadTextureCoordsTransformedHyoushi[6] = tempUVMultRes[0];
            videoQuadTextureCoordsTransformedHyoushi[7] = tempUVMultRes[1];
        }



これで動画の追加は完了です。

モデルデータセットを変更したい場合は以下のコードを編集、追加します。

VideoPlayback 632行目辺り

// データセットをロード:
        if (!dataSetFITPamph.load("追加したいデータセット名.xml",
            STORAGE_TYPE.STORAGE_APPRESOURCE))  //編集箇所
        {





サンプルプログラムのビルドや開発環境については前の記事で
前回:http://taku-note.blogspot.jp/2014/10/eclipsevuforia.html






参考:https://developer.vuforia.com/forum/faq/android-how-do-i-add-another-target-video-playback-sample















0 コメント: