2011年6月15日水曜日

Qualcomm「QCAR」のImageTargetsの表示画像を変えてみる

前回からの続き

Qualcomm「QCAR」のImageTargetsの認識画像を変えてみる


の終わりに次は表示画像(ティーポッド)変えてみると言ってしまったので、続きです。。

さて、変更できるのかな?


変更するのはjni側のファイルです。(ImageTargets/jni)
ファイル名見ていくと、そのまんま”Teapot.h”というファイルがあります。

ファイルの中身はこんな感じ
#define NUM_TEAPOT_OBJECT_VERTEX 824
#define NUM_TEAPOT_OBJECT_INDEX 1024 * 3

static const float teapotVertices[NUM_TEAPOT_OBJECT_VERTEX * 3] =
{
    11.222200, 0.110300, 20.030291,  10.302300, -4.461498, 20.030291,  10.152300,・・・・
};

static const float teapotTexCoords[NUM_TEAPOT_OBJECT_VERTEX * 2] =
{
    0.608828, 0.354913,  0.609037, 0.414650,  0.627128, 0.412296,  0.626946, 0.353747,・・・・
};

static const float teapotNormals[NUM_TEAPOT_OBJECT_VERTEX * 3] =
{
    -0.964496, 0.067011, -0.255454,  -0.865037, 0.431362, -0.256198,  -0.914727, 0.312709,・・・・
};

static const unsigned short teapotIndices[NUM_TEAPOT_OBJECT_INDEX] =
{
    0,1,2, 2,3,0, 4,5,6, 6,7,4, 8,9,10, 10,11,8, 11,10,12, 12,13,11, 1,14,15, ・・・・
};


このファイル”Teapot.h”は、”ImageTargets.cpp”の中で参照されてオブジェクトを生成・表示してます。


今回は、MultiTargetのオブジェクト(皿とスプーン)に変えてみようとしました。
そこで、”Teapot.h”の中身(座標)をMultiTargets/jni/Cube.hに書き換えてみました。

では、実行してみましょう。


あれっ?変わらない・・・。

画像がおかしいのかな。と思い、
ImageTargets/assets/TextureTeapotBrass.png と TextureTeapotBlue.pngを差し替えて、再度実行。


なんかへんなのできた・・・。

形はティーポットで色はお皿のに。

というわけで心折れ、断念しました。ごめんなさい。


分かったこと
・座標は別のところで管理されている?
・OpenGLでオブジェクトは変えることができる(手順などが見つからないけど)
・3Dの知識がないまま進めると大変だった
・ARは楽しい!



何か分かったら更新します。と、一応書いておこう。

8 件のコメント:

  1. こんにちは。前回の3Dオブジェクトを変える記事にコメントした者です。
    3Dオブジェクトを変えるのはなかなか難しそうですね・・・
    私は今、エミュレーターでWebカメラを使えるようにしたけど、QCARのソースがよくわからなくて勉強中です;
    QCARを使ってまた何かされたら是非記事を書いてください!
    楽しみにしてます!

    返信削除
  2. コメントありがとうございます。
    QCARのソース難しいですよね。(ワタシもよく分かってません…)
    日本語の情報少ないですし。

    それでも、
    やっぱりARはおもしろいのでいつか何か作ってみたいと思います。
    また、何かやったらブログ書きますね!

    お互い頑張りましょう(^-^)/

    返信削除
  3. 今日からARを始めてみて、こちらに辿り着きました。
    3Dオブジェクトを変更する場合、.hファイルを書き換えたらcygwinからndk-buildしないと反映されませんよ~

    返信削除
  4. 匿名さん、こんにちは。
    コメントありがとうございます。

    ndk-buildですか、もう一度手順確認して試してみますね!

    3Dオブジェクト変更するには、Teapot.hを変えるだけでよいのかな?不安・・・。

    返信削除
  5. こんばんは。
    今更ですが……
    ndk-buildすれば良いということをここのコメント欄で見てやってみたのですが、うまくいきませんでした。
    そこで、QCAR SDKをインストールしなおして綺麗な状態のSamplesフォルダのImageTargetsフォルダの中のTeapot.hを書き換えてndk-buildし、実行したところ、オブジェクトが変わりました。
    その状態でもう一度Teapot.hの内容を最初に戻して再度ndk-buildし、実行してみたのですが、ポットは出てこず、書き換えた方のオブジェクトが表示されました。
    ということで考えたのですが、一番最初にndk-buildしたときに影響が及ぼされる部分より、二回以降にndk-buildしたときに影響が及ぼされる範囲が狭くて、その範囲に入らないところにオブジェクトのデータが入っているような気がします。
    初心者の長文失礼しました。

    返信削除
  6. コメントありがとうございます。

    なるほど!

    リビルド or クリーンビルドしてみるとよいかもですね。
    コマンドは、
    リビルド:ndk-build -B
    クリーン:ndk-build clean

    こちらの環境は壊れてしまっていて、すぐに試せないです。。

    返信削除
  7. androidの記事を参考にさせて頂いております。

    リビルドするとオブジェクトの変更できました。

    ただこのオブジェクト情報が書いてあるヘッダは意味不明ですね。
    きっと頂点情報なんでしょうけど。

    3Dで作ったオブジェクトからヘッダを作り出してくれるツールがあればいいのに・・・

    返信削除
  8. ご報告ありがとうございます。

    リビルドでオブジェクトの変更できたのですね!

    > 3Dで作ったオブジェクトからヘッダを作り出してくれるツールがあればいいのに・・・
    同じこと思っています。QCARのDeveloper Siteに何か情報ないかな。見てみます。

    返信削除